I'm using EF 6.0 Code First, and I have this entity:
public class TrainingRespect
{
[Key]
public int RespectId { get; set; }
public DateTime? DateWhenRespected { get; set; }
#region
public string UserId { get; set; }
public User User { get; set; }
public Guid TrainingId { get; set; }
public Trening Training { get; set; }
#endregion
}
And I would like to change it's Primary Key (RespectId) from int to GUID / string / long.
What is easiest way of doing this ? Can I just change type and EF migrations will take care of everything or it should be done some other way ?
Ok to actually answer your question. Yes you can just change the data type and Migrations should take care of it.
However based off your comments you're having trouble applying this migration. This doesn't negate the above but I'll attempt to help using a bit of guesswork.
If you're using Sql Azure, you must have clustered indexes on all tables. EF6 should create clustered indexes even on string keys. There is a bug with alpha 3 though where it doesn't create a clustered key on the migrations table.
http://entityframework.codeplex.com/discussions/435723
See the above link for a description and a workaround.
If you're still having trouble, you can run the following command from the package console:
Update-Database -Script
This will produce a SQL Script instead of trying to update directly. You can look at this and see if any of the Create Table statements do not have a clustered index on them.
If, for some reason there aren't. You can explicitly modify your migration's CreateTable statement to make the primary key clustered.
CreateTable("MyTable",
c => new {
Id = c.String(nullable: false, maxLength: 128)
})
.PrimaryKey(t => t.Id, null, true);
Also worth noting: Guids make terrible clustered indexes. If you're using GUID keys and have the option, don't cluster on them and have a second clustered index instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With