32

I am trying to use Entity Framework 5. The first problem was that EF creats tables automatically. I tried to fix it by including dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(). The second problem was the error like this

The model backing the 'CountryContext' context has changed since the database was created. Consider using Code First Migrations to update the database.

I tried fix it by dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); but no sense. The data access layer the next:

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

Additional info: VS 2012, framework 4.5, entity framework 5.0.0.0 And for EF 4 it works perfect (without OnModelCreating method).

Ladislav Mrnka
  • 360,892
  • 59
  • 660
  • 670
Yara
  • 4,441
  • 6
  • 42
  • 62
  • Complete guess here but does EF still recognize the entity as an Identifier when you imply it as `Id` opposed to using ALL CAPS like so: `ID` – Chef_Code Feb 12 '16 at 00:18

3 Answers3

64

You can write this code in OnModelCreating method:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
Majid Hosseini
  • 1,098
  • 10
  • 17
7

If you don't want EF to create tables and manage consistency between you model and database just use this at the startup of your application:

Database.SetInitializer<CountryContext>(null);
Sergey Kolodiy
  • 5,829
  • 1
  • 36
  • 58
Ladislav Mrnka
  • 360,892
  • 59
  • 660
  • 670
6

Using LINQ in EF 6.0:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    var conventions = new List<PluralizingTableNameConvention>().ToArray();
    modelBuilder.Conventions.Remove(conventions);
}
JWP
  • 6,672
  • 3
  • 50
  • 74