如果我有,例如,多到许多称为用户和角色表之间的“RolesToUsers”映射表,这里是我如何做到这一点:更新许多到许多与LinqToSQL关系
// DataContext is db, usr is a User entity
// newUserRolesMappings is a collection with the desired new mappings, probably
// derived by looking at selections in a checkbox list of Roles on a User Edit page
db.RolesToUsers.DeleteAllOnSubmit(usr.RolesToUsers);
usr.RolesToUsers.Clear();
usr.RolesToUsers.AddRange(newUserRolesMappings);
我曾经使用SQL分析器,并且这似乎会生成非常智能的SQL - 它只会删除不再处于映射关系中的行,并且只添加关系中不存在的行。它不会像我以为会那样盲目地彻底清理和重建关系。
关于这个主题,互联网出奇的安静,查询“LinqToSQL多对多”大多只是提供了关于LinqToSQL数据映射器如何不“很好地支持”的文章。
其他人如何使用LinqToSQL更新多对多?
从技术上讲,这不是一个真正的ORM相当于多到很多,因为你是手动清除连接表的。对ORM中m2m的“正确”支持可以将User对象建模为具有名为“Roles”的属性(或集合),因此,ORM将负责编辑封面下的连接表。 – RobS 2010-04-10 12:12:51
至少这是我的解释无论如何.. HIH – RobS 2010-04-10 12:14:41
@ RobS:同意。这也是我的解释:如果你只关心一个特定的用户,你看看'用户'对象'角色'集合。如果您关心某个特定角色,则分别查看“角色”对象的“用户”集合。那是一个ORM的想法,隐藏数据库的东西,并像你一样使用它只使用对象。 – 2010-04-10 12:25:49