更改实体框架模板

时间:2014-08-22 15:12:53

标签: c# json entity-framework

使用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的方式。

3 个答案:

答案 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。