如何在使用Entity Framework codefirst播种数据时控制主键值

Sti*_*son 6 sql-server entity-framework ef-code-first ef-migrations

我正在使用具有codefirst和sql server express 2012的实体框架5创建一个asp.net mvc4站点.

我已经启用了迁移,现在在我的Configuration.Seed方法中执行此操作:(请注意,我想将主键设置为8,即使这是数据库中的第一条记录).

context.ProductCategoryDtoes.AddOrUpdate(x => x.Id,
    new ProductCategoryDto() { Id = 8, Name = "category1" }
);
Run Code Online (Sandbox Code Playgroud)

我的Model对象定义如下:

[Table("ProductCategory")]
public class ProductCategoryDto {
    public long Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这导致(SQL SERVER EXPRESS 2012)中的表,其中Id列具有Identity = true,Identity seed = 1,identity increment = 1.

现在,当我通过在PM> Update-DatabaseId = 1的行中执行此结果来运行迁移时.

所以我的问题是:

1)在播种数据时如何控制自动递增主键的值.

2)如果解决方案是增加键列种子值,那么在我使用时如何完成Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());.这将在每次更新数据库时核对并重建数据库,那么如何在新数据库中更新种子值?

小智 2

只需创建具有默认值的虚拟实体,然后添加真实数据,然后删除虚拟实体。这不是最好的方法,但我想没有其他方法了......