I have a scenario where i would like to change the primary key name in an entity and be able to run update-database -force. See below for code and error getting when i try.
Entity was:
public class Team
{
[Key]
[HiddenInput(DisplayValue = false)]
public virtual int Id { get; set; }
[Display(Name = "Full Name:")]
public virtual string Name { get; set; }
}
Entity Changed to:
public class Team
{
[Key]
[HiddenInput(DisplayValue = false)]
public virtual int TeamId { get; set; }
[Display(Name = "Full Name:")]
public virtual string Name { get; set; }
}
When i run Update-database -Force i get the following error.
Multiple identity columns specified for table 'Teams'. Only one identity column per table is allowed.
Its a matter of naming convention and i need this to be TeamId when i reference it latter, simply Id conflicts with child entity classes.
Any ideas on how i can do this successfully?
Depends on the version of EF you are using.
Even with migrations the result that you will see is something like:
“drop column Id ” and “add column TeamId”.
With this you will lose all values and “child connections”……
The only “secure” solution I am seeing at this point is a mix of Migrations and “hand SQL operations”.
EASY solution:
1- taking in consideration that you already have a “base” migration creating the table with ID, now create the new migration with the “update”. Now do NOT run it yet.
2- Open that file and write a new line BEFORE the generated lines and use a SQL command, something like this:
This will change the name BEFORE the migration deletes the column and create a new one, what will happen is: you change the name before the delete, then the delete is executed but it will “fail” but it will not hurt nothing.
But now you ask: why do I do this? well if you are using migrations even if you delete the lines to delete the column and create a new one, the next time you create automatically a new migration file this new lines will be there…… this is why.
UPDATED ANSWERS #1
When I talk about Entity Framework Migrations I am referring to this:
http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx
When you Run the ‘Add-Migration AddBlogUrl’ command in Package Manager Console, a new file (*.cs) is created.
Example of this file migration file with SQL commands: