EF - как добавить отношения между двумя таблицами и вставить refrenceId в masterTable? - PullRequest
0 голосов
/ 08 июля 2011

Например, у меня есть 3 таблицы:

пользователи - мастер таблицы { Id, Name }

Разрешения - подробности { Id, PermissionTitle }

UserPermissions - это таблица отношений между пользователем и его разрешениями { UserId , PermissionId}

У меня 2 пользователя в tbUsers ( {1,"user1"} , {2,"user2"} ) и у меня есть 3 разрешения в tbPermissions ( {1,"perm1"} , {2,"perm2"} , {3,"perm3"} )

теперь я хочу добавить perm1 и perm2 к user1. Что мне делать в EF?

(я не хочу создавать / вставлять пользователей или разрешения, я просто хочу добавить отношения между ними в таблицу отношений)

из-за EF у меня нет UserPermissions таблицы в моем dataModel.

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Если вы хотите сначала загрузить объекты, вы можете сделать:

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

Если вы знаете идентификаторы и не хотите загружать объекты в первую очередь, вы можете сделать:

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

Эти два подхода могут быть объединены - например, вы можете загрузить пользователя из БД и создать фиктивные объекты только для разрешений.

0 голосов
/ 08 июля 2011

Users должен иметь свойство навигации Permissions, поэтому вам необходимо добавить разрешение для этой коллекции.Должно выглядеть примерно так:

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

context.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...