2015-01-28 4 views
0

Мне нужно написать сценарий БД, который создает таблицу связей в моей базе данных, создавая структуру parent-child внутри одной таблицы. Полученная модель должна быть примерно такой: DB ModelКак создать таблицу первой группы Entity Framework Model First Association?

с n до n отношения между изделиями.

ответ

0

Прежде всего, давайте посмотрим на создание таблицы. Чтобы ассоциация работала правильно в 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 , Когда импорт будет завершен, таблицы в модели будут выглядеть так: enter image description here

Обратите внимание на отсутствие таблицы 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(); 
}