Entity framework DatabaseGenerateOptions的约定。无

Entity framework DatabaseGenerateOptions的约定。无,entity-framework,entity-framework-5,Entity Framework,Entity Framework 5,我想手动插入我所有实体的id。 是否可以创建某种约定,或者我必须为每个实体设置HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)(或添加databasegeneratedattribute) 编辑 有一种更简单的方法可以做到这一点,然后使用公认的答案: modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>(); modelBuilder.

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

编辑

有一种更简单的方法可以做到这一点,然后使用公认的答案:

modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>();
modelBuilder.Conventions.Remove();

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

创建约定类

public class ManualIdentityConvention : Convention
{
    public ManualIdentityConvention()
    {
        this.Properties<int>()
            .Where(p => p.Name.EndsWith("Id"))
            .Configure(p => p.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
    }
}
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));
    }
}
公共类上下文:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Properties()
.Where(x=>x.Name.EndsWith(“Id”))
.Configure(x=>x.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
}
}
在这两种情况下,这两种方法都不是特别外科手术式的,但可以想象的是,通过更具体的where条款,可以收紧公约


这有帮助吗?

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

创建约定类

public class ManualIdentityConvention : Convention
{
    public ManualIdentityConvention()
    {
        this.Properties<int>()
            .Where(p => p.Name.EndsWith("Id"))
            .Configure(p => p.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
    }
}
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));
    }
}
公共类上下文:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Properties()
.Where(x=>x.Name.EndsWith(“Id”))
.Configure(x=>x.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
}
}
在这两种情况下,这两种方法都不是特别外科手术式的,但可以想象的是,通过更具体的where条款,可以收紧公约

这有用吗