2011-07-08 24 views
0

例如我有3個表:EF - 如何在2和表之間的關係添加並在masterTable插入refrenceId?

用戶 - 主表 { Id, Name }

權限 - 細節 { Id, PermissionTitle }

UserPermissions - 是用戶和其權限之間的關係表 { UserId , PermissionId}

我在tbUsers({1,"user1"} , {2,"user2"}) 2個用戶與我公頃ve 3權限tbPermissions({1,"perm1"} , {2,"perm2"} , {3,"perm3"})

現在我想將perm1和perm2添加到user1。我應該在EF嗎?

(我不想創建/插入任何用戶或權限,我只是想在關係表之間添加一個關係)

因爲EF的,我沒有UserPermissions表在我dataModel

回答

0

Users應具有導航屬性Permissions因此您需要將該權限添加到該集合。應類似於此:

user.Permissions.Add(permission1); 
user.Permissions.Add(permission2); 

context.SaveChanges(); 
2

如果你想第一次加載實體,你可以這樣做:

using (var context = new YourContext()) 
{ 
    var user1 = context.Users.Single(u => u.Id == 1); 
    var perm1 = context.Permissions.Single(p => p.Id == 1); 
    var perm1 = context.Permissions.Single(p => p.Id == 2); 

    user1.Permissions.Add(perm1); 
    user1.Permissions.Add(perm2); 
    context.SaveChanges(); 
} 

如果你知道ID和你不希望加載實體首先,你可以這樣做:

using (var context = new YourContext()) 
{ 
    var user1 = new User {Id = 1}; 
    var perm1 = new Permission {Id = 1}; 
    var perm1 = new Permission {Id = 2}; 

    context.Users.Attach(user1); 
    context.Permissions.Attach(perm1); 
    context.Permissions.Attach(perm2); 

    user1.Permissions.Add(perm1); 
    user1.Permissions.Add(perm2); 
    context.SaveChanges(); 
} 

這兩種方法可以結合使用 - 例如,您可以從DB加載用戶並僅爲權限創建虛擬對象。