Прежде всего, давайте посмотрим на создание таблицы. Чтобы ассоциация работала правильно в EF, важно, чтобы первичные ключи были правильно объявлены. Если мы не объявим PK для таблицы ассоциации, в то время как разработчик модели правильно интерпретирует ассоциацию, любая попытка вставить в таблицу вызовет ошибку на .SaveChanges().
Для создания модели, указанной в модели, мы будем использовать следующий код:
create table Article (
articleID int not null identity(1,1),
description varchar(500) not null
)
alter table Article add constraint PK_ArticleID
primary key (articleID)
create table ArticleAssociation (
associatedArticle1ID int not null,
associatedArticle2ID int not null
)
alter table ArticleAssociation add constraint PK_ArticleAssociationID
primary key clustered (associatedArticle1ID, associatedArticle2ID ASC)
alter table ArticleAssociation add constraint FK_AsscociatedArticle1ID
foreign key (associatedArticle1ID) references Article (articleID)
alter table ArticleAssociation add constraint FK_AsscociatedArticle2ID
foreign key (associatedArticle2ID) references Article (articleID)
Теперь о том, что структура существует в БД, можно импортировать как таблицу статьи и таблицы ArticleAssociation в наш .edmx model , Когда импорт будет завершен, таблицы в модели будут выглядеть так:
Обратите внимание на отсутствие таблицы ArticleAssociation и ее генерации как типа «Ассоциация». Мы можем теперь получить доступ к связанным объектам традиционно через навигационные свойства:
using (EFTestingEntities efso = new EFTestingEntities())
{
Article article1 = new Article();
article1.description = "hello";
Article article2 = new Article();
article2.description = "world";
efso.Article.Add(article1);
efso.Article.Add(article2);
article1.Article2.Add(article2);
article2.Article1.Add(article1);
efso.SaveChanges();
}