[英]Modify Entity Framework template to include ReSharper value analysis attributes on entity properties
我的实体数据模型包含有关哪些字段可为空和不可为空的信息。 但是,生成的模板不包含此信息。
在代码的其他地方,我使用JetBrains.Annotations
显示允许使用空值的地方,以及不允许使用空值的地方。 例如:
[NotNull]
public string Thing([CanBeNull] string s)
{
return s ?? "Was null";
}
如何使Entity Framework生成包含这些值分析属性的代码?
我正在通过DbContext
使用Entity Framework 5.0。
在Solution Explorer中 ,在你.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]
放在值类型上,这没有意义,但也不会引起任何问题。 如果有人对支持模板的模型有更多了解,并且可以建议如何进一步改进它,那么我很想听听它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.