如何使用Entity Framework解决循环引用

时间:2015-01-13 15:49:12

标签: c# asp.net-mvc entity-framework postgresql

我不是" MacGyver",所以我需要帮助来解决弗兰肯斯坦的表如何使用EF中的循环参考作品。 (facepalm)这是一个关于postgresql的旧数据库,我需要它在新的网络系统(!!!)上工作。所以,我想我在这里需要一个简单的操纵:)

表A

int id PK;
varchar描述;
varchar other_field
...... int idTableB FK(参考表B键)

表B

int id PK
varchar fieldX
双fYndY
...... int idTableA FK(参考表A键)


如果我尝试使用具有ForeignKey属性的模型,请在附加图像上获取错误。 enter image description here

带有这些错误的模型如下:

模型

[table("table_a")]
public class ModelA {

    [Key, Column("id")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set;]

    [Column("idTableB")]
    public int IdTableB { get; set; }
    [ForeignKey("IdTableB")]
    public virtual ModelB Model_B { get; set; }

}

[table("table_b")]
public class ModelB {

    [Key, Column("id")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set;]

    [Column("idTableA")]
    public int IdTableA { get; set; }
    [ForeignKey("IdTableA")]
    public virtual ModelA Model_A { get; set; }

}

嗯,ModelA的一个对象引用了ModelB的一个对象,它反过来引用了Model A的另一个对象,反过来引用了任何ModelB对象,可能与引用它相同...... OMG!< / p>

是的!我正在使用DatabaseFirst。这是一个简单但非常接近现实的例子。 这里有魔术师帮我解决吗?谢谢你们。

2 个答案:

答案 0 :(得分:0)

只需在dbcontext

上设置它

db.Configuration.ProxyCreationEnabled = false;

答案 1 :(得分:0)

在上下文的构造函数中,验证以下行:

Database.AutoTransactionsEnabled = false;

如果该行处于活动状态,请注释并重试。