开发者

EF - how to add Relationship between 2 tables and insert refrenceId in the masterTable?

For example I have 3 tables:

Users -- the master table { Id, Name }

Permissions -- details { Id, PermissionTitle }

UserPermissions -- is a relation table between User and its Permissions { UserId , PermissionId}

I have 2 users in the tbUsers ( {1,"user1"} , {2,"user2"} ) and I have 3 permissions in the tbPermissions ( {1,"perm1"} , {2,"perm2"} , {3,"perm3"} )

now I want to add perm1 and perm2 to user1. What should I do in EF?

(I don't want to create/insert any Users or Permissions, I just want to add a relationship between them in the relation table)

beca开发者_如何转开发use of EF, I don't have UserPermissions table in my dataModel.


If you want to load entities first you can do:

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();
}

If you know Ids and you don't want to load entities first you can do:

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();
}

These two approaches can be combined - for example you can load user from DB and create dummy objects only for permissions.


Users should have a navigation property Permissions so you need to add the permission to that collection. Should look similar to this:

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

context.SaveChanges();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜