2012-08-26 16 views
22

Ich versuche, Entity Framework 5 zu verwenden. Das erste Problem war, dass EF Tabellen automatisch erstellt. Ich versuchte es zu beheben, indem ich dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>() einfügte. Das zweite Problem war die Fehler wie dieseWie deaktiviert Plural Table Erstellung für Entity Framework 5?

Das Modell des ‚CountryContext‘ Kontextes Sicherung geändert haben, da die Datenbank erstellt wurde. Erwägen Sie, Code First Migrations zu verwenden, um die Datenbank zu aktualisieren.

Ich versuchte es durch dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); beheben, aber keinen Sinn. Die Datenzugriffsschicht die nächste:

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; 
    } 
    } 

Zusätzliche Informationen: VS 2012, Rahmen 4.5, Entity Framework 5.0.0.0 Und für EF 4 funktioniert perfekt (ohne OnModelCreating Methode).

+0

komplette Vermutung hier aber nicht EF noch das ent erkennen als ID, wenn man es als "Id" im Gegensatz zur Verwendung aller CAPS impliziert: 'ID' –

Antwort

42

Sie diesen Code in OnModelCreating Methode schreiben:

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

Wenn Sie nicht möchten, dass EF-Tabellen erstellen und verwalten Konsistenz zwischen Sie modellieren und Datenbank dies nur beim Start der Anwendung verwenden:

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

Dies löst das Problem, aber nicht die Frage - Allerdings stellt der Fragesteller die falsche Frage;) –

4

mit LINQ in EF 6.0:

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

Seltsam - Sie entfernen ein leeres Array des Zieltyps? –