DatabaseGeneratedOption.None公约

Mar*_*rka 1 entity-framework entity-framework-5

我想为我的所有实体手动插入id.是否可以创建某种约定,或者我必须为每个实体设置HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)(或添加DatabaseGenerated属性)?

编辑

有一种更简单的方法可以使用接受的答案:

modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>();
Run Code Online (Sandbox Code Playgroud)

m.c*_*sey 5

可以在EntityFramework 6中创建自定义约定,如下所示:

创建一个约定类

public class ManualIdentityConvention : Convention
{
    public ManualIdentityConvention()
    {
        this.Properties<int>()
            .Where(p => p.Name.EndsWith("Id"))
            .Configure(p => p.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
    }
}
Run Code Online (Sandbox Code Playgroud)

将约定添加到DbContext

public class Context : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Add(new ManualIdentityConvention());
    }
}
Run Code Online (Sandbox Code Playgroud)

EntityFramework 5

至于EntityFramework 5,我相信可以实现类似的东西,但不能通过约定类:

public class Context : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties<int>()
            .Where(x => x.Name.EndsWith("Id"))
            .Configure(x => x.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
    }
}
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,这两种方法都不是特别外科手术,但可以想象通过在一个人的where子句中更具体来收紧惯例.

这有帮助吗?