Создать новый LINQ to Entities Objects с ассоциациями - PullRequest
1 голос
/ 04 марта 2009

Я пытаюсь понять, как добавить новые записи в таблицу, имеющие внешний ключ, в другую таблицу с помощью 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();

Ответы [ 3 ]

0 голосов
/ 04 марта 2009

Это «правильный» путь:

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

или

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

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

Это "хакерский, но более быстрый способ":

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

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

Обновление : Будет лучший способ сделать это в .NET 4.0.

0 голосов
/ 17 марта 2009

Вы также можете сопоставить связанную таблицу с вашим ItemEntity в модели entity.

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

openticket.codeplex.com

0 голосов
/ 04 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...