通过T4模板解决EF模型序列号的循环引用问题

Posted dejex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过T4模板解决EF模型序列号的循环引用问题相关的知识,希望对你有一定的参考价值。

在模型的T4模板(如model.tt)中插入如下代码,这样由模板生成的模型代码中的导航属性将自动带有[JsonIgnore]标识,不会被序列化

1. 添加命名空间的引用

找到以下代码,添加using Newtonsoft.Json;

BeginNamespace(code);
#>
using Newtonsoft.Json;
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
  

2.为导航属性添加JsonIgnore标签

找到以下代码,插入[JsonIgnore]标签

<#
foreach (var navigationProperty in navigationProperties)
{
if (navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
{
#>
[JsonIgnore]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
<#
}
#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
}
}
#>

 

BTW:另外一个比较好的解决方是Gryzor大侠的:

解决.Net MVC EntityFramework Json 序列化循环引用问题.

以上是关于通过T4模板解决EF模型序列号的循环引用问题的主要内容,如果未能解决你的问题,请参考以下文章

解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json

解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json

EF中Json序列化对象时检测到循环引用的解决办法

EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json

EF6:如何避免循环引用?

EF 序列化实体为Json时的循环引用问题(不用自己写实体,不用匿名类型,不用EF的上下文属性)