База данных Entity Framework-атрибут first и column не работает

#c# #entity-framework #entity-framework-6.2

#c# #entity-framework #entity-framework-6.2

Вопрос:

У меня есть база данных с ограничением, на которое заканчиваются все первичные ключи _Id . Для моих классов EF я хотел опустить подчеркивание, поэтому я изменил шаблон T4 для генерации свойств на этот ( CodeStringGenerator.Property ):

 public string Property(EdmProperty edmProperty)
{
    var dbName = _code.Escape(edmProperty);
    var propResult = "";

    if(dbName.Contains("_"))
    {
        propResult = "[Column(""   dbName   "")]rnt";
        dbName = dbName.Replace("_", "");
    }

    return propResult   string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1} {2} {{ {3}get; {4}set; }}",
        Accessibility.ForProperty(edmProperty),
        _typeMapper.GetTypeName(edmProperty.TypeUsage),
        dbName,
        _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
        _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}
  

Это удаляет все «_» из имени свойства и записывает атрибут столбца в свойство. Но, похоже, это нарушает EF. С помощью атрибута column EF выдает исключение каждый раз, когда я пытаюсь сделать что-то вроде выбора объекта.

Исключением является:

Тип объекта ENTITY не является частью модели для текущего контекста.

Если я напишу исходное имя, как в базе данных, EF будет работать с объектом, но не если я добавлю атрибут column.

Есть ли какой-либо способ переименовать все свойства или заставить атрибут column работать? Использование EF6.2

Комментарии:

1. Вы ссылаетесь на шаблон t4, который генерирует EDMX и классы сущностей? Если нет, я предполагаю, что вы работаете с кодом в первую очередь, поэтому вы можете использовать пользовательские соглашения code-first для достижения желаемого.

2. @GertArnold Да, я ссылаюсь на шаблоны t4, используемые для создания моих объектов в стратегии «Сначала в базу данных «… как написано в заголовке этого раздела.

3. Тогда у вас закончились варианты. При работе database-first аннотации данных игнорируются. Информация о сопоставлении в EDMX преобладает. Насколько мне известно, нет способа вмешаться в то, как инструменты entity framework в Visual Studio записывают EDMX.

Ответ №1:

После нескольких дней исследований я не нашел другого способа, кроме использования AutoMapper для одномоментного преобразования столбца в объект.Имена свойств поэтому я решил переключить свой ORM на более простой, который работает в основном с подходом Database First.

Вывод: невозможно