1
說我有兩個實體,每個實體約20屬性和像這樣一個多到多關係:與實體框架許多一對多插入
User (Id int,Name string, .......)
Issue (Id int,Name string, .......)
IssueAssignment (UserId,RoleId)
我想創建一個新的問題和分配它給一些現有的用戶。如果我有這樣的代碼:
foreach(var userId in existingUserIds)
{
int id = userId
var user = _db.Users.First(r => r.Id == id);
issue.AssignedUsers.add(user);
}
_db.Users.AddObject(user);
_db.SaveChanges();
我注意到,當我對我的SQL數據庫運行它似乎效率非常低效。如果我看 SQL事件探查它做以下幾點:
- SELECT TOP(1)* FROM用戶其中userid =用戶id
- SELECT * FROM IssueAssignment ON User.Id =用戶id
- INSERT INTO用戶....
- INSERT INTO IssueAssignment
我的問題是:
(一)爲什麼(1)和(2)必須在所有發生的呢?
(b)(1)和(2)都會帶回所有字段,我需要做一個對象投影來限制 字段,這看起來像是不必要的工作。
感謝您的幫助
謝謝拉迪斯拉夫,現場答案。所以附加技巧的上下文認爲用戶已經加載? – 2011-04-10 11:01:35
是的。這是在多對多關係中起作用的技巧。 'Attach'使用戶知道上下文。 – 2011-04-10 11:03:30