实体框架中出现不需要的导航属性

时间:2012-09-28 18:20:58

标签: json entity-framework serialization

我正在使用Entity Framework来创建一个Model,我对Entity Framework很新,所以请耐心等待。

我希望我的数据库永远都是最终产生的所有东西,所以我不想对模型本身进行修改。我想对数据库进行所有修改,然后点击“从数据库更新模型”。这一直在游泳! 但是,如果我在两个表之间有一对一的关系,并且我在数据库中设置了外键约束,则会在子表中获得一个返回父表的导航属性。

因此,如果我想从孩子那里访问父母,我可以做child.parent.fieldName

理论上听起来很棒,但是当我需要为实体框架创建的JSON序列化对象时,我的问题就出现了。我总是得到一个错误,因为它试图将父对象与子对象一起序列化。通常在这一点上有一个无效的状态所以.. A)它不能序列化和B)我不想要所有额外的信息。

我是否以某种方式错误配置了数据库?有没有办法让数据库指定我只需要模型中的Parent.Child导航属性?而不是Child.Parent?

1 个答案:

答案 0 :(得分:2)

  

我是否以某种方式错误配置了数据库?有没有办法让数据库指定我只需要模型中的Parent.Child导航属性?而不是Child.Parent?

没有。数据库对您在其上使用某些工具的意图一无所知。如果您不想要导航属性,则必须通过删除它在EDMX中更改它,但有时您需要该属性但您还需要序列化。在这种情况下,您必须修改用于生成类的策略(如果您不使用T4模板,那将非常困难)使用一些依赖于使用的序列化API的特殊属性来将某些属性标记为未序列化。

正确的方法不是序列化实体,而是创建从实体填充的特殊数据传输对象,这些对象仅包含您要序列化的属性/数据,因此您不会遇到此问题。