簡體   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