EF - 如何添加2个表之间的关系并在masterTable中插入refrenceId?

时间:2011-07-08 16:15:24

标签: entity-framework

例如,我有3个表:

用户 - 主表 { Id, Name }

权限 - 详细信息 { Id, PermissionTitle }

UserPermissions - 是用户及其权限之间的关系表 { UserId , PermissionId}

我在tbUsers ( {1,"user1"} , {2,"user2"} )中有2个用户 我在tbPermissions ( {1,"perm1"} , {2,"perm2"} , {3,"perm3"} )

中拥有3个权限

现在我想将perm1和perm2添加到user1。我该怎么做EF?

(我不想创建/插入任何用户或权限,我只想在关系表中添加它们之间的关系)

因为EF,我的UserPermissions中没有dataModel表。

2 个答案:

答案 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();