2009-03-04 1 views
1

Я пытаюсь понять, как добавить новые записи в таблицу с внешним ключом в другую таблицу, используя LINQ to Entities. Я попробую и объясню:Создать LINQ to Entities Объекты с ассоциациями

Скажем, у меня простая база данных с двумя таблицами. Например, можно вызвать один элемент LibraryItem и другой LibraryItemStatus. LibaryItem имеет внешний ключ в таблице LibraryItemStatus, поэтому элементу может быть присвоен статус.

Мой вопрос: как создать новый LibraryItem с помощью LINQ To Entities и связать его со статусом? Мой код ниже должен быть неправильным, но я не могу найти примеров, которые помогут.

LibraryEntities entities = new LibraryEntities(); 

LibraryItem item = new LibraryItem(); 
item.Name = "some name"; 
item.SomeAttribute = "x"; 
// What do I do here? 
// This seems wrong as I don't want a new status. 
item.Status = new Status() { id = 1 }; 
// This seems wrong as I don't really want to have to query the repository 
item.Status = entities.Status.First(s => s.StatusID == 1); 
// 
entities.AddToItems(item); 
entities.Savechanges(); 

ответ

0

Это "правильный" способ:

item.Status = entities.Status.First(s => s.StatusID == 1); 

или:

item.Status = entities.GetObjectByKey(new EntityKey("MyContext.Status", "StatusID", 1)); 

... который будет загружаться из памяти, если объект уже загружен (entities.Status.First будет всегда запросить БД).

Это "Hacky, но более быстрый путь":

item.StatusReference.EntityKey = new EntityKey("MyContext.Status", "StatusID", 1); 

Хорошо: Никогда любой запрос. Плохо: вы не можете ссылаться на item.Status; он все равно будет нулевым.

Update: There will be a better way to do this in .NET 4.0.

0

Проверьте наличие предмета. СвойствоStatusReference. Это позволяет некоторое обнаружение/установление метаданных в отношении отношений, фактически не запрашивая его.

0

Вы также можете отобразить таблицу, связанную с вашей ItemEntity в entitymodel.

Я сделал это для ProductName в продукте -> ProductLanguage в моем проекте, опубликованном по адресу ниже.

openticket.codeplex.com

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

  • Нет связанных вопросов^_^