-->

如何关闭以复数表创建为实体框架5?(How turn off pluralize table cre

2019-06-17 20:57发布

我试图使用实体框架5.第一个问题是,EF自动外币表。 我试图通过包括修复它dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>() 第二个问题是这样的错误

该模型支持的“CountryContext”语境已经改变,因为该数据库已创建。 考虑使用的Code First迁移来更新数据库。

我试图修复它dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 但没有任何意义。 数据访问层下一:

Table(Name = "tblCountries")]
public class Country
{
     [Column(Name = "id", IsDbGenerated = true, IsPrimaryKey = true)]
    public int Id {get;set;}

    [Column(Name = "name")]
    public string Name {get;set;}
}

public class CountryContext:DbContext
{
    public CountryContext(string connStr):base(connStr)
    {
    }

    public DbSet<Country> TblCountries { get; set; }

    protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
    {
        dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    }
}

    public class CountryDal:BaseDal
{
   public int CheckIsExist(Country country)
    {
        int id = 0;
        using (var context = new CountryContext(ConnectionString))
        {
            var first = context.TblCountries.FirstOrDefault(el => el.Name == country.Name);
            if (first != null)
            {
                id = first.Id;
            }
        }
        return id;
    }
    }

附加信息:VS 2012,框架4.5,实体框架5.0.0.0而对于EF 4它完美的作品(不OnModelCreating法)。

Answer 1:

你可以写在OnModelCreating方法的代码:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();


Answer 2:

如果你不想EF创建表和管理一致性之间您建模和数据库只使用这个在您的应用程序的启动:

Database.SetInitializer<CountryContext>(null);


Answer 3:

在EF 6.0中使用LINQ:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    var conventions = new List<PluralizingTableNameConvention>().ToArray();
    modelBuilder.Conventions.Remove(conventions);
}


文章来源: How turn off pluralize table creation for Entity Framework 5?