EF自动生成的(T4模板) 关联属性元数据修改

it2022-05-09  45

为了实现 T4模板关联属性 不要序列化的问题 就是要在具体的 关联属性上面添加一个元数据

这里利用以前的 Newtonsoft.Json 这个框架为例

效果应该为

就是要在关联属性上面添加元数据  【JsonIgnore】

注意: 默认会报错,如下

请记住错误个数,多了就证明你写的有问题。而且你不要奇怪有这么多错误。

如果你不出现这么多个错误提示,你就应该去找一下模板 如下的位置。

把T4模板 关掉错误就不会存在了。

 

 

步骤

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 Newtonsoft.Json;"): "";}

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);}

越学越不懂。

转载于:https://www.cnblogs.com/jixinyu12345/p/4863860.html


最新回复(0)