繁体   English   中英

在多对多数据库Sql Server中的过渡表中添加项目和更新关系

[英]Add item and update relationship in transitional table in many-to-many database Sql Server

-这是错误的模型,没有AB之间的许多关联。 更正于EDIT2--

数据库中存在A ,数据库中存在B 我只需要输入带有一些Properties1和Properties2的新C元素(并更新现有AB元素中C集合)

我尝试了很多选项,例如这样,但是还是有些错误(使用ObjectOCntext和存在的Key等)

void SaveNewC(C newC)
{
    using (var context = new MyEntities(connectionString))
    {
        var dbA = context.A.Where(a => a.Id == newC.A.Id).SingleOrDefault();
        var dbB = context.B.Where(b => b.Id == newC.B.Id).SingleOrDefault();

        newC.A = dbA;
        newC.B = dbB;
        context.AddObject(newC);

        context.SaveChanges();
    }
}

编辑

我得到的异常是: "An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key."

EDIT2更新了模型

在此处输入图片说明

context.Entry(dbA).State = EntityState.Unchanged;
context.Entry(dbB).State = EntityState.Unchanged;
context.AddObject(newC);
context.SaveChanges();

显然,您的newC已经使用正确的Id填充了导航属性AB 然后,您可以将导航属性引用的实体附加到上下文:

void SaveNewC(C newC)
{
    using (var context = new MyEntities(connectionString))
    {
        context.A.Attach(newC.A);
        context.B.Attach(newC.B);

        context.C.AddObject(newC);

        context.SaveChanges();
    }
}

您是否需要映射联结表? 如果您想要的只是A-> B中的“多对多”,则可以用一种更简单的方式来实现。

如果您将C表创建为真正的联结-并且在SQL中将A和B的FK设置为​​它的PK,如下所示:

在此处输入图片说明

然后,当您从模型创建edmx时,将创建以下内容:

在此处输入图片说明

现在,在代码中,如果您想添加关系,只需将其添加到集合中,EF就会在您的C表中自动为您创建关系:

        var A = new A();
        var b = new B();
        var b2 = new B();

        A.B.Add(b);
        A.B.Add(b2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM