通过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大侠的:
以上是关于通过T4模板解决EF模型序列号的循环引用问题的主要内容,如果未能解决你的问题,请参考以下文章
解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json
解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json