путать с ленивой загрузкой - PullRequest
0 голосов
/ 14 марта 2012

Сначала я использую код для проверки отложенной загрузки, модели, как показано ниже,

class Team
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Boss { get; set; }
        public string City { get; set; }
        public List<Player> players { get; set; }

        public Team()
        {
            players = new List<Player>();
        }
    }

    class Player
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Number { get; set; }
        public int Age { get; set; }
        public Team team { get; set; }
    }

и подобный контекст,

class testContext : DbContext
    {
        public DbSet<Team> teamSet { get; set; }
        public DbSet<Player> playerSet { get; set; }
    }

Я прочитал книгу Джулии Лерман "Programing Entity Framework",и запутался с ленивой загрузкой.Когда я пишу код, как показано ниже,

using (var context = new testContext())
            {
                //context.Configuration.LazyLoadingEnabled = false;
                //var teams = from t in context.teamSet.Include(p=>p.players) select t;
                var teams = from t in context.teamSet select t;
                foreach (var v in teams)
                {
                    Console.WriteLine(v.players.Count());
                }
                Console.Read();
            }

Когда выполняется оператор foreach, я думаю, v.players.Count () попадет в базу данных и вернет мне значение, а если я отключил отложенную загрузку, онне попадет в базу данных и вернет мне ноль.Но независимо от того, включена я отложенная загрузка или отключена отложенная загрузка, значение всегда равно нулю.Мое понимание ленивой загрузки неверно?Кто-нибудь может помочь?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Попробуй сделать из игрока добродетель

public Virtual List<Player> players { get; set; }
0 голосов
/ 14 марта 2012

о ленивой загрузке ..

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

В вашем случае это будет означать, что players является свойством навигации v (TeamSet). Если загружен один team set, то Entity Framework загружает также players для этого team set.

Ваш пример кода больше похож на тест, поскольку для запроса нет .Where. Если позже вы получите сотни TeamSets, это вызовет огромное количество запросов к базе данных.

Прочитайте это , чтобы понять, почему возвращается нулевой счет.

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