C # Entity Framework заполнить частичное свойство - PullRequest
4 голосов
/ 01 февраля 2011

У меня есть объект под названием Person, у которого есть набор адресов.

Я создал:

public partial class Person
{
     public int AddressCount{get{return Addresses.Count;}}
}

Это возвращает ошибку:

Экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения.

Я возвращаю коллекцию людей, как я могу это сделать, не делая этого:

public int AddressCount
        {
            get
            {
                using (var c = new Entities())
                {
                    return c.People.Where(s => s.PersonId == PersonId).Single().Addresses.Count;
                }
            }
        }

1 Ответ

4 голосов
/ 01 февраля 2011

Я обнаружил, что это работает для быстрой загрузки свойства "count" без загрузки всех сущностей в коллекции:

using (var context = new Entities())
{
    var people = (from p in c.People
                  select new 
                  {
                      Person = p,
                      AddressCount = p.Addresses.Count
                  }).ToList();

    foreach (var item in people)
    {
        item.Person.AddressCount = item.AddressCount;
    }
}

Недостатком, конечно, является то, что AddressCount должен быть настраиваемым,Я полагаю, вы могли бы дать ему внутренний установщик, если ваш контекст находится в той же сборке, что и класс сущностей.

Возможно, вам не нужен Include("Addresses") - это стоит протестировать. Редактировать удалил его, так как он не является обязательным (и фактически может заставить запрос выполнять больше работы, чем должен).

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