2012-08-26 10 views
22

Sto tentando di utilizzare Entity Framework 5. Il primo problema è che EF crea automaticamente le tabelle. Ho provato a risolverlo includendo dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(). Il secondo problema era l'errore come questoCome disattivare la creazione di tabelle plurali per Entity Framework 5?

Il contesto del modello "CountryContext" è stato modificato dal momento in cui è stato creato il database . Prendi in considerazione l'utilizzo di Code First Migrations per aggiornare il database .

Ho provato a risolverlo da dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); ma non ha senso. Il livello di accesso ai dati la prossima:

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

Ulteriori informazioni: VS 2012, framework 4.5, Entity Framework 5.0.0.0 E per EF 4 funziona perfettamente (senza metodo OnModelCreating).

+0

indovinare completo qui, ma non EF ancora riconosce l'ent come identificatore quando lo si intuisce come "Id" contrario all'uso di MAIUSC come in questo modo: 'ID' –

risposta

42

è possibile scrivere questo codice in modalità OnModelCreating:

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

Se non si desidera EF per creare tabelle e gestire la coerenza tra di modellare e il database basta usare questo all'avvio dell'applicazione:

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

Questo risolverà il problema ma non la domanda - Tuttavia l'interrogante sta ponendo la domanda sbagliata;) –

4

utilizzando 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

Strano - rimuovi un array vuoto del tipo di target? –

Problemi correlati