Add Unique constraint to AspNetUsers.UserName code first with migrations - asp.net-mvc

How can I add a unique contraint to the AspNetUsers.UserName column using Entity Framework migrations? It seems like a jungle to me figuring out how the initial Identity tables are configured.

To make the column unique you can use Data Annotations and the attribute [Index(IsUnique=true)] in your code. Please see this Post by #juFo for more information.

Related

Creating Model in Entity Framework

I am creating models in Entity Framework. I am trying to insert records in tblOffStrategy. In tblOffStrategy, OffId is Foreign Key and OffId and BonusStrategy are composite keys. DBA's creates table for us so I am creating model based on tables.
When I add-migration from Package Manager Console, I am getting "Unable to determine composite primary key ordering, Use the ColumnAttribute". Also I am not sure if my Foreign Key relationship is working.
Would anyone take a look at it and point me to right direction? Any help will be appreciated

use grails unique constraint only for generating DDL

I would like to generate multicolumn unique constraints in Grails such as one defined in following entity class
class Relationship {
Element source
Element destination
Type type
// other properties omitted
static constraints = {
type unique: ['source', 'destination']
}
}
but I don't want to have that constraint active during the validation as it consumes lot of resources (see alternative to grails multicolumn unique constraint (optimistic inserts)) for stats.
Is there any way to achieve that? What are the alternatives to generate the unique index automatically (with checking for existing one)?
I've done this in an app where I knew that a column's values were unique based on how they were generated, so I didn't want Grails to run a select query during validation, but wanted the database check just in case something weird happened.
I would do this using a database migration. Add whatever constraints and indexes you like, in addition to the updates that are needed to keep the code and database in sync (e.g. adding/removing columns or tables, changing column types, etc.)

Is it possible to make Entity Framework insert primary key that I given?

I forced to work with database where tables haven't auto increment. And I can't alter it. I want to insert entity using Entity Framework. I create an object of this entity and manually set it's Id field (primay key) and then make Add and SaveChanges. But I see in log, that EF clear the value of DbParameter for Id field. Is there any solution for this?
You can add an annotation of fluent configuration to tell EF the keys are manual. See Entering keys manually with Entity Framework. You could also add a custom convention to handle globally: Convention for DatabaseGeneratedOption.None

EF4 Automatic Check Constraints

How can I specify a Check Constraint in EF4 CodeFirst.
Example: I have a string property for which I can have only specific values.
EF code first doesn't have any equivalent for check constraints. If you want to have check constraint in the database you can either use custom database initializer and execute custom SQL to alter table and add check constraint (I described similar approach for unique index here) or if you are already using EF code first migrations you can add constraint creation to your Up method in code based migration.

How to create model from database preserving 'default' constraint values

My existing table contains nearly 50 columns, most of them have the 'default' constraint.
I have created the model based on this database table. All seemed ok, until i tried to insert a new row. I've got a sql server error stating that some column cannot be null. It appears that creating a model from the database did not preserve the default constraints.
I edited the model manually adding all the defaults and after that inserting didn't fail.
So my question is, how do i create a model that automatically picks up default constraints associated to the columns?
Using mvc4, visual studio 2010, sql server 2008 r2.
Google search didnt make sense as all the people seemed to be talking about something different than what i need.
Pretty sure my answer from Possible to default DateTime field to GETDATE() with Entity Framework Migrations? will work for you too. By using a modified MigrationCodeGenerator class and iterating through the operations list you can update the columns and add DefaultValueSql values based on whatever rules you need.
Well, you have a number of options. You could set the default values in the Model's default constructor. I think this is the better solution.
If you must have the default constraints in your database you could do set defaultValueSql in your data migrations like this:
AddColumn("ExistingTable", "NewColumn",c => c.Int(nullable: false, defaultValueSql: "0"));

Resources