繁体   English   中英

修改实体框架模板以在实体属性上包括ReSharper值分析属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM