2012-08-26 84 views
22

estoy tratando de utilizar Entity Framework 5. El primer problema fue que EF creats tablas automáticamente. Intenté solucionarlo incluyendo dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(). El segundo problema fue el error como este¿Cómo desactivar la creación de tabla plural para Entity Framework 5?

El modelo que respalda el contexto 'CountryContext' ha cambiado desde que se creó la base de datos . Considere usar Code First Migrations para actualizar la base de datos.

He intentado solucionarlo por dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); pero no tiene sentido. La capa de acceso de datos al siguiente:

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

Otros detalles: VS 2012, 4,5 marco, marco de la entidad 5.0.0.0 Y para EF 4 funciona perfecto (sin método OnModelCreating).

+0

conjetura completa aquí pero todavía EF reconoce el ent dad como un identificador cuando se da a entender como 'Id' opone al uso de mayúsculas, así:' ID' –

Respuesta

42

Puede escribir el código en el método OnModelCreating:

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

Si no desea EF para crear tablas y gestionar la coherencia entre modelar y base de datos sólo tiene que utilizar esto en el inicio de la aplicación:

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

Esto va a resolver el problema, pero no es la pregunta - Sin embargo, la pregunta está haciendo la pregunta equivocada;) –

4

mediante LINQ en EF 6.0:

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

extraño - que eliminar una matriz vacía del tipo de destino? –

Cuestiones relacionadas