例如,我有3个表:
用户 - 主表
{ Id, Name }
权限 - 详细信息
{ Id, PermissionTitle }
UserPermissions - 是用户及其权限之间的关系表
{ UserId , PermissionId}
我在tbUsers
( {1,"user1"} , {2,"user2"} )
中有2个用户
我在tbPermissions
( {1,"perm1"} , {2,"perm2"} , {3,"perm3"} )
现在我想将perm1和perm2添加到user1。我该怎么做EF?
(我不想创建/插入任何用户或权限,我只想在关系表中添加它们之间的关系)
因为EF,我的UserPermissions
中没有dataModel
表。
答案 0 :(得分: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加载用户并仅为权限创建虚拟对象。
答案 1 :(得分:0)
Users
应该有一个导航属性Permissions
,因此您需要为该集合添加权限。看起来应该类似于:
user.Permissions.Add(permission1);
user.Permissions.Add(permission2);
context.SaveChanges();