gpt4 book ai didi

c# - 将两个实体之间的关系保存为 N-N 关联

转载 作者:太空狗 更新时间:2023-10-29 22:55:08 26 4
gpt4 key购买 nike

我有一个 Entity Framework 4.0,带有 poco 对象。 edmx 模型文件是从数据库生成的。

此数据上下文是通过 WCF 服务访问的,这只是意味着我收到了一些对象,我需要将它们附加到当前数据上下文(或使用 key 对应重新加载它们)。

似乎一切正常,除了一种情况:

我在两个表之间有一个 N-N 关系,所以我有一个关联表,除了两个表的 ID 之外没有任何字段: Database model

LINQ 将其转换为以下模式,这似乎是正确的。 LINQ Data model

当我检索数据时,没有问题,我自己插入 Right_group 的数据被正确地转换为“我的 Rights/Groups 集合中的新对象”。

但是如果我尝试修改一些东西并保存,它就不起作用

 public void SaveRights(Group group, List<Rights> rights){
//here, group and rights are objects attached to the database
group.Rights.Clear();
group.Rights.AddRange(rights);
_dataContext.SaveChanges();
}

所以我的问题是:如何保存两个对象的这种“关系”?谢谢!

最佳答案

如果您想避免首先从数据库加载对象,您可以这样做(代码取 self 的一个应用程序,因此您必须对其进行调整):

    public void AddAndRemovePersons(int id, int[] toAdd, int[] toDelete)
{
var mailList = new MailList { ID = id, ContactInformations = new List<ContactInformation>() };
this.db.MailLists.Attach(mailList);

foreach (var item in toAdd)
{
var ci = new ContactInformation { ID = item };
this.db.ContactInformations.Attach(ci);
this.db.ObjectStateManager.ChangeRelationshipState(mailList, ci, ml => ml.ContactInformations, System.Data.EntityState.Added);
}

foreach (var item in toDelete)
{

var ci = new ContactInformation { ID = item };
this.db.ContactInformations.Attach(ci);
this.db.ObjectStateManager.ChangeRelationshipState(mailList, ci, ml => ml.ContactInformations, System.Data.EntityState.Deleted);
}
}

我发现删除关系和创建关系一样难,所以我把代码留在那里。关于此解决方案的一件事是,在运行此功能之前,邮件列表和联系人都已存在。我附加它们以使状态管理器跟踪它们。

如果您正在添加您也想保存的新对象,您可以使用

this.db.MailLists.AddObject(你是这里的新项目)

希望对您有所帮助!

关于c# - 将两个实体之间的关系保存为 N-N 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com