修改实体框架模板

本文关键字:框架 实体 修改 | 更新日期: 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。