【问题标题】:more than one navigation to the same entity多个导航到同一个实体
【发布时间】:2014-02-02 08:08:59
【问题描述】:

当有 2 个导航时,我遇到了 2 个实体之间的连接问题。

具体来说,我有以下课程:

public class TableA
{
    public TableA()
    {
        ListBs = new List<TableB>();
    }

    [Key]
    public int Id { get; set; }

    public TableB MainB { get; set; }

    public virtual ICollection<TableB> ListBs { get; set; }
}

public class TableB
{
    [Key]
    public int Id { get; set; }

    public virtual TableA refA { get; set; }

    [Required]
    public string Text { get; set; }

}

这个特定类的场景反映了以下内容: TableA 有一个 TableB 对象列表 并且还有 1 个主要的 TableB 对象(当然也在列表中)。 此外,TableB 对象可能实际上没有对 TableA 的引用

抓取工作。 但是当我尝试插入新项目时,出现以下异常:

无法确定相关操作的有效顺序。由于外键约束、模型要求或存储生成的值,可能存在依赖关系。

知道我哪里做错了吗?

【问题讨论】:

  • 问题不是循环引用。经过大量的摆弄和尝试,我将其范围缩小为在两个导航属性中插入一个新对象(没有 id)。
  • 我使用微风,在这个问题上我能找到的唯一解决方案是保存实体两次:首先将受尊敬的实体添加到列表中并保存。然后将其设置为额外引用的项目并再次保存。

标签: c# entity-framework ef-code-first code-first


【解决方案1】:

使用此代码:

public class TableA
{
    public TableA()
    {
        ListBs = new List<TableB>();
    }

    [Key]
    public int Id { get; set; }

    public int TableB_Id { get; set; }

    [InverseProperty("TableA_Mains")]
    [ForeignKey("TableB_Id")]
    public TableB MainB { get; set; }

    [InverseProperty("refA")]
    public virtual ICollection<TableB> ListBs { get; set; }
}

public class TableB
{
    [Key]
    public int Id { get; set; }

    public int TableA_Id { get; set; }

    [Foreignkey("TableA_Id")]
    [InverseProperty("ListBs")]
    public virtual TableA refA { get; set; }

    [Required]
    public string Text { get; set; }


    [InverseProperty("MainB")]
    public virtual ICollection<TableA> TableA_Mains { get; set; }

}

【讨论】:

  • [InverseProperty("TableA_Main")] 是什么意思?
  • 是否应该以某种方式引用 TableA 的构造函数?你测试过你的代码吗?是否有此类逆属性引用的一些文档?我无法让它工作。另请参阅:stackoverflow.com/questions/34943464/…
  • 啊,现在我明白了。 TableA_Mains 是 TableB 中集合的名称。很抱歉,也感谢您提供另一个示例。
猜你喜欢
  • 2014-09-29
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多