2015-05-02 2 views
0

Я использую Entity Framework 4 на C# Winforms.Аналогичные отношения столбцов в платформе Entity

У меня есть базы данных SQL Server с 2 таблицы, как это:

Users стол:

UserId (int) (PK) 
UserName 

Products стол:

ProductId (int)(PK) 
ProductTitle 
UserId1 (int) (foreign key referencing `UserId` in `Users` table) 
UserId2 (int) (foreign key referencing `UserId` in `Users` table) 

Я моделирования базы данных SQL Server в моем C# проекта с Entity Framework (включая столбцы внешнего ключа в модели).

Тогда я получаю записи с этим кодом:

Entities dbEnteties = new Entities(); 
dbEnteties.ContextOptions.LazyLoadingEnabled = false; 
var dbe = dbEnteties.Products.Include("Users"); 
var result = dbe.ToList(); 

Когда я получаю запись из базы данных, я вижу, что UserId1 поля имеет данные, но UserId2 поля Null.

Что случилось с моим кодом на C#? И как я могу решить эту проблему ?!

+1

Почему у вас есть два внешних ключа, ссылающихся на таблицу пользователей? – vortex

+0

user1 для чего-то и пользователя2 для чего-то еще. Мне нужно иметь 2 столбца. например user1 создать продукт и продукт для обновления user2 –

+0

Итак, вы хотите достичь многих-многих отношений между двумя таблицами? Или один продукт, чтобы иметь много пользователей? – vortex

ответ

0

Совершенно нормально, если у вас есть два внешних ключа в таблице Products, указывающие на таблицу Users. Я делаю это все время, и ваша причина для этого в порядке.

С тех пор, как вы отключили режим «Ленивый», вам необходимо явно «включить» свойства навигации, если вы хотите, чтобы запрос автоматически загружал их. Вам нужно будет выяснить, какие имена предназначены для свойств навигации, которые Entity Framework автоматически создала для вас. Я предполагаю, что вы используете модель «Database First». Если это так, то дважды щелкните файл .EDMX и посмотрите таблицу Products. Вы должны увидеть раздел, который называется «Свойства навигации». Их можно назвать «Пользователь» и «Пользователь1». Если это так, вам нужно сделать следующее. Поскольку у вас есть два отдельных связей между таблицами, вы будете нуждаться в два отдельных «.INCLUDE» заявлений:

  dbEnteties.Products.Include(product => product.User); 
      dbEnteties.Products.Include(product => product.User1); 

(Не забудьте включить используя System.Data.Entity, в самом начале файла, в противном случае синтаксис лямбда не будет работать.)

+0

спасибо, это работа Я использую этот код и отлично работает: dbEnteties.Products.Include («Пользователи»). Включить («Пользователи1»); –

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