Пользовательское свойство: должно быть что-то очевидное, я делаю неправильно - PullRequest
2 голосов
/ 13 сентября 2010

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

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

Обновлено пример:

        public List<Friend> FriendsInGoodStanding
    {
        get
        {
            using (var context = new GarbageEntities())
            {
                var a = context.Friends.Include("aspnet_User1").Where(f => f.UserID == this.UserId && f.Blocked == false).ToList();
                var b = context.Friends.Include("aspnet_User").Where(f => f.FriendUserID == this.UserId && f.Blocked == false).ToList();
                a.AddRange(b);
                return a.Distinct().ToList();
            }
        }
    }

Каждый раз, когда я пытаюсь использовать это свойство, я получаю следующую ошибку:

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

Line 4936:            get
Line 4937:            {
Line 4938:                return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<aspnet_User>("GarbageModel.FK_Friends_aspnet_Users", "aspnet_User").Value;
Line 4939:            }

Это должно быть что-то очевидное, что я упустил из виду.

1 Ответ

4 голосов
/ 13 сентября 2010

Источником этой ошибки является то, что ваша программа пытается «Ленивая загрузка» одного из свойств навигации на объекте вашего друга Friend, и это происходит, когда вы уже прочитали свойство FriendsInGoodStanding и объектный контекст былраспоряжаться, из-за использования заявления.
Теперь я вижу, что вы стремитесь загрузить aspnet_User1, а также вызываете ToList () в конце вашего запроса, поэтому это должно быть другое свойство навигации для объекта Friend .Если вы покажете клиентский код, который использует свойство FriendsInGoodStanding , то я могу точно сказать, что это такое, но пока что я догадываюсь, что у вас есть свойство aspnet_User в объекте Friend, которое также должно быть загружено какэто:

public partial class aspnet_User{

    public List FriendsInGoodStanding {
        get {
            using (var context = new GarbageEntities()) {

                var a = context.Friends
                     .Include("aspnet_User1")
                     .Include("aspnet_User")
                     .Where(f => f.UserID == this.UserId && f.Blocked == false).ToList();

                var b = context.Friends
                     .Include("aspnet_User")
                     .Include("aspnet_User1")
                     .Where(f => f.FriendUserID == this.UserId && f.Blocked == false).ToList();
                a.AddRange(b);
                return a.Distinct().ToList();
            }
        }
    }
}



Другое решение:
будет отключить отложенную загрузку , чтобы контекст вашего объекта покончил с этимисключение.Вы можете сделать это, щелкнув правой кнопкой мыши на своей модели и затем выбрав свойства, а затем найдите параметр «Ленивая загрузка включена», который по умолчанию имеет значение true, просто установите для него значение false.Или программно вы можете кодировать:

var context = new GarbageEntities();
context.ContextOptions.LazyLoadingEnabled = false;

Как только он отключен, вы все равно можете явно загружать связанные данные по требованию, если это необходимо, или даже загружать данные вместе с первоначальным запросом.Просто следите за NullReferenceException!

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