У меня есть база данных с ограничением, что все первичные ключи заканчиваются на _Id
. Для моих классов EF я хотел опустить подчеркивание, поэтому я изменил шаблон T4 для генерации свойств на это (CodeStringGenerator.Property
):
public string Property(EdmProperty edmProperty)
{
var dbName = _code.Escape(edmProperty);
var propResult = "";
if(dbName.Contains("_"))
{
propResult = "[Column(\"" + dbName + "\")]\r\n\t";
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 будет работать с сущностью, но не будет, если я добавлю атрибут столбца.
Есть ли способ переименовать все свойства или заставить работать атрибут столбца?
Использование EF6.2