2012-08-26 37 views
22

我想使用實體框架5.第一個問題是EF自動創建表。我試圖通過包括 dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>()來解決它。第二個問題是這樣的錯誤如何關閉實體框架5的複數表創建?

自從創建數據庫 以來,支持'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

完整的猜測,但在這裏不EF仍然承認耳鼻喉科作爲一個標識符,當你暗示它爲'Id'反對使用所有帽子這樣的:'ID' –

回答

42

你可以寫在OnModelCreating方法驗證碼:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
5

如果你不想EF創建表和管理一致性之間您建模和數據庫只使用這個在您的應用程序的啓動:

Database.SetInitializer<CountryContext>(null); 
+0

這將解決問題,但不是問題 - 但提問者問的是錯誤的問題;) –

4

在EF 6.0中使用LINQ:

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

奇怪 - 你刪除目標類型的空數組? –