【问题标题】:Entity Framework Many To Many Issues实体框架多对多问题
【发布时间】:2009-02-18 09:31:59
【问题描述】:

我有一个使用包含附加信息的链接表的多对多关系。 3 个实体,LHS、RHS、LHSRHS LHS 1 - * 带 LHSRHS RHS 1 - * 带 LHSRHS

我使用设计器根据表格生成 EDMX

我有 2 个问题 1)如果创建所有 3 个实体(新实体)将它们链接起来并尝试持久化,我会遇到 FK 违规,因为它在插入 RHS 表之前尝试插入 LHSRHS 表

2) 如果我从数据库加载一个 LHS 对象,然后尝试创建一个 RHS 对象并将其链接到 LHS 对象,我得到一个 FK 冲突。 如果我从数据库加载一个 RHS 对象,然后尝试创建一个 LHS 对象并将其链接到 RHS 对象,我可以完美地工作。

代码:

        //WORKS
        eftestEntities es = new eftestEntities();
        RHS existing = es.RHS.First();

        LHS newObject = new LHS();
        newObject.ID = "LHs1";
        newObject.Name = "LHs1";
        LHSRHS link = new LHSRHS();

        link.Something = "some";

        link.LHS = newObject;

        existing.LHSRHS.Add(link);

        es.SaveChanges();

        ...........

        //DOES NOT WORK
        eftestEntities es = new eftestEntities();
        LHS existing = es.LHS.First();

        RHS newObject = new RHS();
        newObject.ID = "RHSNEW1";
        newObject.Name = "RHSNEW";
        LHSRHS link = new LHSRHS();

        link.Something = "some";

        link.RHS = newObject;

        existing.LHSRHS.Add(link);

        es.SaveChanges();

有人有什么想法吗?

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    它在保存 rhs 之前尝试插入链接的事实表明,其中一个关系没有被标记为外键:它不应该这样做(如果配置正确)。

    您的链接表是否有自己的额外数据?如果没有,您实际上可以从模型中完全删除该表 - 只需关联两个有趣的表(多对多),并选择链接表作为关联的存储机制 (您需要在设计器中单击两个表格之间的链接)。

    或者,如果您的链接表有一个复合键:“lhsid,rhsid”,那么我相信该工具会自动为您完成所有这些工作。

    【讨论】:

    • 链接表确实有自己的数据,所以它是必需的。映射所有看起来都是正确的,并且是使用 DB 中的生成模型生成的。还看着视觉代表。 VS中的模型正确显示了实体之间的关系。
    【解决方案2】:

    如果链接表不只是一个复合键(即,如果表有超过 2 列),EF 将不会做聪明的事情并正确设置导航属性。当您仅将 2 列设置为复合键时,链接表将从实体中“消失”,并且您将获得一个导航属性,该属性将另一个实体公开为相关实体的集合。我听说 EF v2 将支持附加元数据与复合键一起标记的场景:(

    【讨论】:

      【解决方案3】:

      我在网上找到了一个有效的示例,逐行坐在 Beyond Compare 重命名我的所有变量以匹配我的变量我发现的唯一差异,分节排序,我调整无济于事,事实上他们在我使用 varchars 的地方使用 int PK 更改我在 int 中的键使其工作。 考虑到我的数据库已经 15 岁,并且几乎每个表中都有 varchar PK,这个 ofcouse 并没有真正的帮助:(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多