我正在尝试使用Entity Framework 5.第一个问题是EF自动创建表。我尝试通过包括修复它
dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>()
。第二个问题是像这样的错误
支持'CountryContext'上下文的模型自从以来发生了变化 数据库已创建。考虑使用Code First Migrations进行更新 数据库。
我尝试按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方法)。
答案 0 :(得分:52)
您可以在OnModelCreating方法中编写此代码:
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
答案 1 :(得分:5)
如果您不希望EF创建表并管理模型和数据库之间的一致性,请在应用程序启动时使用它:
Database.SetInitializer<CountryContext>(null);
答案 2 :(得分:5)
在EF 6.0中使用LINQ:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var conventions = new List<PluralizingTableNameConvention>().ToArray();
modelBuilder.Conventions.Remove(conventions);
}