2

我的实体数据模型包含有关哪些字段可以为空和不可为空的信息。但是,生成的模板不包含此信息。

在我的代码的其他地方,我JetBrains.Annotations用来显示允许空值的位置和不允许空值的位置。例如:

[NotNull]
public string Thing([CanBeNull] string s)
{
    return s ?? "Was null";
}

如何使 Entity Framework 生成包含这些值分析属性的代码?

我正在通过DbContext.

4

1 回答 1

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]没有意义的值类型,但也不会导致任何问题。如果有人对支持模板的模型有更多了解并可以建议如何进一步改进,我很想听听。

于 2013-08-02T15:14:14.860 回答