asp.net mvc 3 - Как вы загружаете детей и внуков сущности? - PullRequest
1 голос
/ 30 августа 2011

Я хотел бы знать, как загрузить несколько уровней сущностей; более конкретно, как загрузить несколько уровней потомков одной сущности. Вот пример, который я создал. Предположим, что в веб-интерфейсе после создания нового продукта я бы хотел отобразить тип его категории. Таким образом, у нас есть продукт определенной категории, и у этой категории есть тип категории с именем:

[HttpPost]
public ActionResult DoSomething(Product product)
{
    if (ModelState.IsValid)
    {
        productRepository.InsertOrUpdate(product);
        productRepository.Save();
        ...
        context.Entry(product).Reference(p => p.Category).Load();
        string someString1 = product.Category.SomeProperty;
        ...
        string someString2 = product.Category.CategoryType.Name;
        ...

Кто-то показал мне, как загружать потомков после сохранения объекта в другом сообщении (см. SomeString1 в приведенном выше примере), но я не могу понять, как загрузить внуков (someString2).

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

Я использую ASP.Net MVC 3 с EF 4.1. И все это довольно ново для меня, поэтому, пожалуйста, потерпите меня.

Ответы [ 4 ]

2 голосов
/ 31 августа 2011

См. Готовая загрузка нескольких уровней сущностей и Явная загрузка связанных сущностей в http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

1 голос
/ 01 сентября 2011

Вы можете получить это так

context.Entry(product).Reference(p => p.Category).Load();
string someString1 = product.Category.SomeProperty;
...

context.Entry(product.Category).Reference(c => c.CategoryType).Load();
string someString2 = product.Category.CategoryType.Name;
1 голос
/ 30 августа 2011

Убедитесь, что EagerLoading (не LazyLoading) включен.

http://blogs.microsoft.co.il/blogs/gilf/archive/2010/06/22/eager-loading-with-repository-pattern-and-entity-framework.aspx

Если вы ПОКАЗЫВАЕТЕ подобные данные, вам необходимо убедиться, что эта загрузка выполняется внутри вашего ObjectContext. Если вы сохраняете только данные, вы можете выполнить отложенную загрузку, если используете данные в том же ObjectContext.

Edit: Поскольку вы хотите загрузить все связанные сущности в отправляемой вами модели, попробуйте просто загрузить вашу сущность, как указано выше, а затем вызвать TryUpdateModel (yourLoadedModel), чтобы объединить значения из ModelState с загруженным объектом и сохранить его. Теперь у вас есть все отношения, а также значения из формы.

0 голосов
/ 30 августа 2011

Я сейчас работаю над проектом EF4.1.Мне не нужно ничего указывать - дочерние объекты загружаются автоматически.Мне просто нужно вызвать свойство для этого объекта.

Например: customerObj.Address.County

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