如果我有,例如,多到許多稱爲用戶和角色表之間的「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