Измените шаблон Entity Framework, чтобы включить атрибуты анализа значений ReSharper в свойствах объекта
Моя модель данных сущностей содержит информацию о том, какие поля могут быть обнуляемыми и не обнуляемыми. Однако сгенерированные шаблоны не включают эту информацию.
В другом месте в моем коде я использую JetBrains.Annotations
чтобы показать, где пустые значения разрешены, а где нет. Например:
[NotNull]
public string Thing([CanBeNull] string s)
{
return s ?? "Was null";
}
Как я могу заставить Entity Framework генерировать код, который включает эти атрибуты анализа значений?
Я использую Entity Framework 5.0 через DbContext
,
1 ответ
В обозревателе решений под вашим .edmx
файл там будет .tt
файл с тем же именем, что и файл EDMX (не .Context.tt
один). Откройте этот файл для редактирования.
Этот файл является шаблоном, который используется для генерации исходных файлов класса сущностей. Мы изменим шаблон, чтобы включить эти атрибуты в сгенерированный исходный код.
Вокруг строки 23 вы увидите код, который запускает новый файл. Измените это, чтобы испустить using
объявление:
fileManager.StartNewFile(entity.Name + ".cs");
#>
using JetBrains.Annotations;
<#
BeginNamespace(code);
Затем около строки 73 вы увидите цикл foreach, который генерирует код для свойств. Измените его так, чтобы он напоминал:
foreach (var edmProperty in simpleProperties)
{
if (edmProperty.TypeUsage.Facets["Nullable"].Value.ToString() == "False")
{
#>
[NotNull]
<#
}
else
{
#>
[CanBeNull]
<#
}
#>
<#=codeStringGenerator.Property(edmProperty)#>
<#
}
Сохраните файл и вашу сущность .cs
файлы будут восстановлены. Откройте их, чтобы проверить, что они правильно компилируются. Возможно, вам придется добавить ссылку на JetBrains.Annotations.dll
или где бы вы ни хранили эти определения классов атрибутов.
Это положит [NotNull]
на типах значений, которые не имеют смысла, но также не вызывают проблем. Если кто-то знает больше о модели, поддерживающей шаблоны, и может предложить дальнейшее улучшение, мне было бы интересно узнать об этом.