修改实体框架模板
本文关键字:框架 实体 修改 | 更新日期: 2023-09-27 18:19:11
我在使用实体框架时有一些问题。
我总是使用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的方式
我建议您使用NewtonSoft。Json序列化器。它工作得很好,有很多设置选项可以处理,包括循环引用。这个序列化器有很多好的文档和帮助。别做无谓的重复工作了。
循环引用是这样控制的:
SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
我相信这个答案描述了你需要做的事情。
对于任何需要应用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
{
}
您可以通过修改T4模板文件(。tt文件)。在文本编辑器中查看.tt文件,您将能够看到属性是在哪里创建的。在你的模板中插入[ScriptIgnore]属性,当你重新生成你的实体时,它将被自动包含。
你可能需要在模板的顶部加上一个合适的'using'等等。
你可以通过编辑T4模板做很多事情,我们用它来自动让我们的实体实现所有属性的INotifyPropertyChanged。