这是我的模型类:
public abstract class BaseEntity
{
[Key]
public Guid Guid { get; set; }
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int Id
{
get;
set;
}
}
public class Menu : Abstract.BaseEntity
{
public string Title { get; set; }
public string Url { get; set; }
}
public class SpaceShipEntities : DbContext
{
public DbSet<Menu> Menu { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
我使用迁移。还有我的配置类:
internal sealed class Configuration : DbMigrationsConfiguration<SpaceProject.Models.SpaceShipEntities>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(SpaceProject.Models.SpaceShipEntities context)
{
context.Menu.AddOrUpdate(
c => c.Title,
new Menu() { Guid = Guid.NewGuid(), Title = "Главная" }
);
}
}
当我在空数据库中使用包命令“Update-Database -Verbose”时,新行已插入数据库。但是当我第二次使用“Update-Database -Verbose”时,Seed方法尝试更新行,我有以下错误:
更新记录时发生错误。有关详细信息,请参阅内部异常。 ---&GT; System.InvalidOperationException:不支持更改列模板“Identity”。专栏:“Id”。表:“CodeFirstDatabaseSchema.Menu”。
答案 0 :(得分:0)
如果您将Guid用作钥匙,Guid将会被编入索引。我将使用Id作为密钥并使用[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]装饰Guid,然后将其播种:
protected override void Seed(SpaceProject.Models.SpaceShipEntities context)
{
context.Menu.AddOrUpdate(
c => c.Guid,
new Menu() { Guid = Guid.Parse("..."), Title = "Главная" }
);
}