EF自動產生的(T4模板) 關聯屬性中繼資料修改

來源:互聯網
上載者:User

標籤:

為了實現 T4模板關聯屬性 不要序列化的問題 就是要在具體的 關聯屬性上面添加一個中繼資料

這裡利用以前的 Newtonsoft.Json 這個架構為例

效果應該為

就是要在關聯屬性上面添加中繼資料  【JsonIgnore】

注意: 預設會報錯,如下

請記住錯誤個數,多了就證明你寫的有問題。而且你不要奇怪有這麼多錯誤。

如果你不出現這麼多個錯誤提示,你就應該去找一下模板 如下的位置。

 

步驟

1、匯入命名空間。不然出來的全是BUG

//添加引用
public string UsingDirectives(bool inHeader, bool includeCollections = true)
{
return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
? string.Format(
CultureInfo.InvariantCulture,
"{0}using System;{1}{3}" +
"{2}",
inHeader ? Environment.NewLine : "",
includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "",
inHeader ? "" : Environment.NewLine, Environment.NewLine + "using System.Runtime.Serialization;")
: "";
}

2、匯入命名空間  ,然後我們就要找導覽屬性到底是什麼了

首先我找到 Property 屬性這裡,

加到裡面後發現效果有問題。

除了導覽屬性外 ,其他的屬性都有了中繼資料,就是說我找錯位置了。

然後我繼續找 在   Property  下面有一個 NavigationProperty

public string NavigationProperty(NavigationProperty navigationProperty)
   {
       var endType = _typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType());
       return string.Format(
           CultureInfo.InvariantCulture,
           "{5}{0} {1} {2} {{ {3}get; {4}set; }}",
           AccessibilityAndVirtual(Accessibility.ForProperty(navigationProperty)),
           navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType,
           _code.Escape(navigationProperty),
           _code.SpaceAfter(Accessibility.ForGetter(navigationProperty))

, _code.SpaceAfter(Accessibility.ForSetter(navigationProperty)), "[JsonIgnore]" + Environment.NewLine);
   }

3、果然這樣就有了資料

儲存後會自動修改中繼資料,所以不用擔心。

4、擴充:
下面 提供一些其他的特性添加的位置

如果添加下面這些資料,還要匯入命名空間

using System.Runtime.Serialization; 方法同步驟1

//給屬性增加[DataMember]
public string Property(EdmProperty edmProperty)
{
return string.Format(
CultureInfo.InvariantCulture,
"{5}{0} {1} {2} {{ {3}get; {4}set; }}",
Accessibility.ForProperty(edmProperty),
_typeMapper.GetTypeName(edmProperty.TypeUsage),
_code.Escape(edmProperty),
_code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
_code.SpaceAfter(Accessibility.ForSetter(edmProperty)), "[DataMember]" + Environment.NewLine);
}
//給類添加[DataContract]
public string EntityClassOpening(EntityType entity)
{
return string.Format(
CultureInfo.InvariantCulture,
"{4}{0} {1}partial class {2}{3}",
Accessibility.ForType(entity),
_code.SpaceAfter(_code.AbstractOption(entity)),
_code.Escape(entity),
_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)),
"[DataContract]" + Environment.NewLine
);
}

越學越不懂。

EF自動產生的(T4模板) 關聯屬性中繼資料修改

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.