J'essaie d'utiliser Entity Framework 5. Le premier problème était que EF crée automatiquement des tables. J'ai essayé de le réparer en incluant dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>()
. Le deuxième problème était l'erreur comme celle-ci
Le modèle soutenant le contexte "CountryContext" a changé depuis la création de la base de données. Pensez à utiliser Code First Migrations pour mettre à jour la base de données.
J'ai essayé de le réparer par dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>();
mais pas de sens. La couche d'accès aux données la suivante:
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;
}
}
Informations supplémentaires: VS 2012, framework 4.5, framework d'entité 5.0.0.0 Et pour EF 4, cela fonctionne parfaitement (sans la méthode OnModelCreating).
Vous pouvez écrire ce code dans la méthode OnModelCreating:
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
Utilisation de LINQ dans EF 6.0:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var conventions = new List<PluralizingTableNameConvention>().ToArray();
modelBuilder.Conventions.Remove(conventions);
}
Si vous ne voulez pas qu'EF crée des tables et gère la cohérence entre votre modèle et votre base de données, utilisez-le au démarrage de votre application:
Database.SetInitializer<CountryContext>(null);