1

У меня есть четыре таблицы в SQL Server, изображение таблицы и отношения.Две таблицы с составным ключом объединены в Entity Framework

enter image description here

Проблема заключается в том, когда я использую Entity Framework таблицы GroupAdmins и GroupMembers соединяется в одну таблицу, изображение показать ситуацию:

enter image description here

Я хочу, чтобы получить четыре таблицы в Entity Framework. Что мне делать ?

Update

Реальная проблема заключается в том, что я не могу добавлять или удалять элементы для GroupAdmins и GroupMembers таблиц точно так же, как и я с другими таблицами. Например, если я хочу, чтобы добавить элемент в AspNetUsers, я использую это:

using (var db=new DatabaseContext()) 
     { 
     AspNetUsers user = new AspNetUsers{Id=1,Email="[email protected]"}; 
     db.AspNetUsers.add(user); 
     db.SaveChanges(); 
     } 

В то время как я не могу сделать то же самое для GroupAdmins и GroupMembers, потому что GroupAdmins и GroupMembers не существует.

+2

Это путь EF обрабатывает многие-ко-многим - вы не увидите ссылку «» таблицы, которые соединяют две таблицы в таких отношения. –

+0

@marc_s Вы имеете в виду, что не можете отделить таблицы? –

+0

Нет - это просто таблицы ссылок, чтобы установить отношения «многие ко многим» - EF будет ** не показывать **, но обрабатывать их «за кулисами» для вас. Вы не теряете никаких особенностей! Просто позвольте EF выполнить свою работу –

ответ

1

Если у вас есть взаимосвязь между многими таблицами между двумя таблицами, в реляционной базе данных вам понадобится таблица «link» для подключения двух базовых таблиц.

EF обрабатывает это автоматически для вас - он явно не создает эту таблицу ссылок - он обрабатывает эти вставки и удаляет внутренне, за кулисами. Вам не нужно ничего делать вообще! Используйте это поведение по умолчанию - не сражайтесь! Он работает в ваших интересах!

Что вы делаете в основном добавлять новые записи в одной из таблиц в коллекции на основе свойства навигации и EF будет автоматически вставлять необходимые записи в соответствующую таблицу ссылок.

Так, например, вы могли бы сделать что-то вроде этого:

using (var db = new DatabaseContext()) 
{ 
    AspNetUsers user = new AspNetUsers { Id = 1, Email = "[email protected]" }; 
    db.AspNetUsers.add(user); 

    // get a group to add the new user to 
    Groups g = db.Groups.FirstOrDefault(g => g.Name = "SomeGroupName"); 

    if(g != null) 
    { 
     // since I don't have your EDMX model here, I don't know if "AspNetUsers" for the "Groups" 
     // refers to the "GroupMembers" or the "GroupAdmins" connection - *YOU* can see this when 
     // you look at the EDMX model designer! 
     g.AspNetUsers.Add(user); 
    } 

    // now when you save, you'll get a new user in "AspNetUsers", AND ALSO: you'll get an entry 
    // in either "GropuMembers" or "GroupAdmins" that contains the two ID's - AspNetUsers.Id 
    // and the Id for the group with the name of "SomeGroupName" 
    db.SaveChanges(); 

} 
+0

Как замечание, имеет смысл иметь эти многозначные таблицы мостов, доступные в модели, если они содержат дополнительную информацию, например дату создания отношения или любой другой атрибут. То есть если они включают дополнительные столбцы, кроме связанных таблиц. – JotaBe

+0

@JotaBe: правильный - и в этом случае EF ** будет ** покрывать эти таблицы. Только если не содержать ничего, кроме двух PK из связанных таблиц, EF «спрячет» их за кулисами –

+0

Ничего из этого не работает с базой данных. EF не будет создавать * ничего * для вас; вы несете ответственность за настройку всех таблиц базы данных, как и должно быть. –

 Смежные вопросы

  • Нет связанных вопросов^_^