Как отключить создание множественной таблицы для Entity Framework 5?

Я пытаюсь использовать Entity Framework 5. Первая проблема заключалась в том, что EF автоматически создает таблицы. Я попытался исправить это, включив dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(). Второй проблемой была такая ошибка

Модель, поддерживающая контекст CountryContext, изменилась с момента создания базы данных. Рассмотрите возможность использования Code First Migrations для обновления базы данных.

Пробовал исправить dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); но толку нет. Уровень доступа к данным следующий:

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

Дополнительная информация: VS 2012, framework 4.5, entity framework 5.0.0.0 И для EF 4 работает отлично (без метода OnModelCreating).


person Yara    schedule 26.08.2012    source источник
comment
Полное предположение здесь, но EF по-прежнему распознает объект как идентификатор, когда вы подразумеваете его как Id, в отличие от использования ВСЕХ ЗАГЛАВНЫХ БУКВ, например: ID   -  person Chef_Code    schedule 12.02.2016


Ответы (3)


Вы можете написать этот код в методе OnModelCreating:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
person Majid Hosseini    schedule 17.06.2013
comment
использование System.Data.Entity.ModelConfiguration.Conventions; - person Crismogram; 17.07.2018

Если вы не хотите, чтобы EF создавал таблицы и управлял согласованностью между вашей моделью и базой данных, просто используйте это при запуске вашего приложения:

Database.SetInitializer<CountryContext>(null);
person Ladislav Mrnka    schedule 26.08.2012
comment
Это решит проблему, но не вопрос. Однако спрашивающий задает неправильный вопрос;) - person Luke T O'Brien; 06.10.2017

Использование LINQ в EF 6.0:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    var conventions = new List<PluralizingTableNameConvention>().ToArray();
    modelBuilder.Conventions.Remove(conventions);
}
person JWP    schedule 28.09.2016
comment
Странно - вы удаляете пустой массив целевого типа? - person Kieren Johnstone; 29.06.2017
comment
Просто отметим, что conventions — это не пустой массив, он содержит PluralizingTableNameConvention - person dynamiclynk; 25.05.2021