使用Entity Framework时遇到了一些问题。
我总是使用JSONHelper类将字符串列表转换为JSON。
这是JSONHelper类:
public static class JSONHelper
{
public static string ToJSON(this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
public static string ToJSON(this object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return serializer.Serialize(obj);
}
}
此类创建JSON。但有时它会给我一个错误,说“在实体中检测到循环引用...........”
因此,在实体框架为我创建的类的一些属性中,我必须使用[ScriptIgnore]
属性。然后它工作正常。
现在,假设我在数据库中进行了一些小改动。所以我将刷新我的ADO.Net实体数据模型。然后我再次打开所有这些类文件并编写[ScriptIgnore]。
所以,我决定对模板设计师进行更改。但我找不到实体框架用来创建我的POCO类的文件。
任何想法????
请不要告诉我改变将List转换为JSON的方式。
答案 0 :(得分:2)
我建议您使用NewtonSoft.Json序列化程序。它运行良好,并具有处理许多事情的设置选项,包括循环引用。该序列化程序有很多很好的文档和帮助。不要重新发明轮子。
循环引用如下控制:
SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
答案 1 :(得分:0)
我相信this回答描述了您需要做的事情。
对于您需要应用ScriptIgnore
属性的任何实体,您可以创建一个用于执行属性修饰的分部类。
说你的实体是这样的
public partial class Entity
{
public int Id { get; set; }
public string Name { get; set; }
}
您可以像这样创建一个单独的部分类
public interface IEntity
{
[ScriptIgnore]
string Name { get; set; }
}
public partial class Entity:IEntity
{
}
答案 2 :(得分:0)
您可以通过修改T4模板文件(.tt文件)来实现此目的。在文本编辑器中查看.tt文件,您将能够看到您的属性的创建位置。在模板中插入[ScriptIgnore]属性,当您重新生成实体时,它将自动包含在其中。
您可能需要包含适当的'使用'在模板的顶部等。
您可以通过编辑T4模板做很多事情,我们使用它来自动让我们的实体为所有属性实现INotifyPropertyChanged。