web-dev-qa-db-fra.com

Comment désactiver la création de table pluralisée pour Entity Framework 5?

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).

27
Yara

Vous pouvez écrire ce code dans la méthode OnModelCreating:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
54
Majid Hosseini

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);
}
5
John Peters

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);
5
Ladislav Mrnka