2010-06-09 2 views
1

У меня возникли проблемы с пониманием EntityFrameworkEntity Framework новичок вопрос

У меня есть таблица под названием «Категории» с столбцами «IdCategory, CategoryName». У меня есть таблица под названием «Страна», с колоннами «IdCountry, CountryName»

У меня есть таблица под названием «Продукт» с колоннами «IdProduct, IdCategory, IdCountry, ProductName»

Когда я создаю де EDM Это отображает все 3 объекта. сущность продукта только 2 свойства скалярных «IdProduct, ProductName» и 2 навигационные свойства «Категория, Страна»

Проблема я столкнулся, когда я хочу, чтобы создать новый продукт

Product p = new SalesContext.Produc(); 
p.IdProduct = 1; 
p.ProductName = "New Product"; 

Таковы только свойства, которые я могу установить. Проблема в том, что мне нужно установить IdCategory и IdCountry, но эти свойства не существуют в Product Entity. У меня есть только свойства навигации.

Так как я могу установить IdCategory и IdCountry перед вызовом

SalesContext.AddProduct(p); 
SalesContext.SaveChanges(); 

Пожалуйста, помогите мне!

Dev Enviroment: VS2008 sp1, .net 3.5 sp1, выиграть 7.

ответ

3

Предположив вы правильно определили FKs в БД, вы должны иметь ассоциации в других таблицах, так что вы можете изменить свой код :

Product p = new SalesContext.Product(); 
p.IdProduct = 1; 
p.ProductName = "New Product"; 
p.Category = SalesContext.Categories.First(c => c.IdCategory == 1); 
p.Country = SalesContext.Countries.First(c => c.IdCountry == 2); 
SalesContext.AddProduct(p); 
SalesContext.SaveChanges(); 
+0

Благодарим за помощь. Крейг. Но почему я должен пойти еще раз в db, чтобы получить категорию и сущность страны. Если я уже сейчас категория и страна id, почему бы просто не устанавливать значения, добавить продукт в контекст и сохранить изменения? Раньше я использовал тот же самый сценарий с Linq в sql, и мне не нужно было получать информацию из db, просто установите id. –

+2

Вам не обязательно читать их из БД. Я просто пытаюсь заставить вас начать с самой простой вещи, которая могла бы работать. Если у вас есть рабочее решение, и профилирование показывает, что это горячая точка, вы можете попытаться «оптимизировать» его. –

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