Entity Framework создает множественное имя таблицы, но представление ожидает единственное имя таблицы?

Здесь: (числа являются произвольными, и вы можете играть с ними, важно, чтобы плавать вход и отрицательный запас на диапазоне, удерживающем измерительный блок)

CSS:

#form>span {
    display: inline-block;
    padding-top: 5px;
    margin-left: -16px;
}
#form>input {
    padding: 5px 16px 5px 5px;
    float:left;
}

HTML:

lb

JSFiddle DEMO

29
задан nograde 28 October 2011 в 04:29
поделиться

6 ответов

Поэтому я перестал пытаться делать это так, как я чувствовал, что это должно быть сделано, и удалил множественное число все вместе. Я точно не знаю наверняка, но я предполагаю, что проблема связана с поддержкой MyFL .net коннектора EF. Вот что я сделал.

Во-первых, в моем методе ApplicationStart произошла ошибка:

//WRONG
//Database.SetInitializer(new DropCreateDatabaseAlways<myDB>());
Database.SetInitializer(new myDBInitializer());

Во-вторых, я перестал вызывать базовую реализацию OnModelCreating, которая не указана в исходном коде, поскольку я реализовал ее только согласно предложению jgauffin:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    //DONT DO THIS ANYMORE
    //base.OnModelCreating(modelBuilder);
    //modelBuilder.Entity<Vote>().ToTable("Votes")
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

В-третьих, я читал в некоторых постах, что MySQL .net Connector не позволяет EF фактически СОЗДАТЬ базу данных, поэтому я изначально создал пустую БД. Похоже, это больше не относится к коннектору 6.4.4+, и пока пользователь вашей строки подключения имеет возможность создавать новые базы данных, он работает лучше, если он изначально не существует.

Однажды я сделал все вышеперечисленное, похоже, это сработало. Так что теперь я могу хотя бы двигаться вперед. Надеемся, мы сможем выяснить причину множественного / единственного несоответствия в будущем.

Спасибо всем за их время и усилия.

45
ответ дан nograde 28 October 2011 в 04:29
поделиться

В вашем классе контекста myDB переопределите следующий метод

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    base.OnModelCreating(modelBuilder);
}

, чтобы он не преобразовывал сгенерированные имена таблиц.

20
ответ дан Morten Mertner 28 October 2011 в 04:29
поделиться

Снимите флажок «Плюрализовать или сгенерировать имена генерируемых объектов» при создании объекта сущности.

enter image description here

8
ответ дан Dan 28 October 2011 в 04:29
поделиться

Откройте класс DbContext, связанный с таблицами, для которых вы хотите сохранить имя таблицы в единственном числе.

Если вы используете EF 6, добавьте ссылку на:

using System.Data.Entity.ModelConfiguration.Conventions;

Если это более старая версия, добавьте ссылку на:

using System.Data.Entity.ModelConfiguration.Conventions.Edm.Db;

Наконец, создайте метод который переопределяет OnModelCreating и удаляет соглашение для множественного числа имен таблиц:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
9
ответ дан Bartho Bernsmann 28 October 2011 в 04:29
поделиться

Вам необходимо переопределить OnModelCreating в вашем DbContext, чтобы указать имя таблицы:

modelBuilder.Entity<Vote>().MapSingleType().ToTable("Votes")
3
ответ дан jgauffin 28 October 2011 в 04:29
поделиться

Если вы используете Code First с EF 6.1 +, переопределите обработчик события OnModelCreating и выполните следующие вызовы:

dmbCloud.Conventions.Remove<PluralizingEntitySetNameConvention>();
dmbCloud.Conventions.Remove<PluralizingTableNameConvention>();
3
ответ дан Kram 28 October 2011 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: