2017-01-16 14 views
1

В настоящее время я использую базу данных SQL Server и должен подключать ее к ASP.Net с использованием Entity Framework. У меня в настоящее время нет внешних ключей в моей базе данных, смогу ли я все же поднять базу данных и запустить запросы LINQ с такими командами, как .Include()?Как подделать базу данных SQL Server с помощью ASP.Net Entity Framework

Текущая проблема, с которой я сталкиваюсь, - это моя модель базы данных, хранящая исторические данные, поэтому у меня есть несколько таблиц с составными первичными ключами. Без этого отношения один к одному в базе данных я не могу запускать какие-либо запросы в отношении таких отношений, как метод .Include().

Так мои вопросы заключаются в следующем:

  1. Должен ли я включать внешние ключи в базе данных SQL Server для того, чтобы использовать функции, такие как .Include()?

  2. Я прочитал онлайн, что самый простой способ включить отношение FK между основным составным ключом и одним ПК в базе данных SQL Server должен заключаться в создании фиктивных столбцов в таблицах, чтобы связать составной первичный ключ с таблицы внешнего ключа. Есть ли лучший способ создать отношения FK за пределами создания фиктивных столбцов или реструктуризации данных?

Ниже приведен пример того, как составной первичный ключ один первичный ключ выглядит:

ID*| CODE* | YEAR* | SEQ*| DATA 
01 | ABCD | 2015 | 01 | 23 
01 | ABCD | 2016 | 01 | 24 
02 | ABCD | 2016 | 01 | 21 


CODE* | DESC 
ABCD | AlphabetSoup 
  • = таблица первичный ключ
+0

Зависимый объект FK должен указывать на основной объект PK. В вашем примере таблица с составной PK является зависимой таблицей, поэтому нет никакой проблемы с установкой 'Table1.CODE' как FK-ассоциации с' Table2.CODE'. Связь будет много (таблица 1) к одной (таблица 2). –

ответ

1

Должен ли я включить внешние ключи в базе данных SQL Server

Нет, вы можете добавить ассоциации к вашей модели. Но это не значит, что разумно обойтись без внешних ключей в базе данных. Если можете, добавьте их как можно скорее, желательно вчера.

Вы можете добавить ассоциацию к модели класса EF с помощью текучего API, например:

modelBuilder.Entity<Main>() 
      .HasRequired(m => m.Code).WithMany() 
      .HasForeignKey(m => m.CODE); 

... где Main таблица с композитным ПК.

создания фиктивных столбцов в таблицах

Не уверен, что вы имеете в виду. Как вы видите, одно поле составного ПК вполне может служить в качестве FK до один PK-поле в другой таблице (обозначается как Code).

Снова добавьте внешние ключи в базу данных, чтобы иметь ссылочную целостность. В настоящее время нет гарантии, что Include будет работать должным образом, потому что в таблице таблицы CODE могут быть непревзойденные значения.