Как вы запрашиваете набор объектов и в том же фильтре запроса присоединенная коллекция сущностей?

Я впервые использую Entity Framework и заметил, что объект сущностей возвращает коллекции сущностей.

DBEntities db = new DBEntities();
db.Users; //Users is an ObjectSet<User>
User user = db.Users.Where(x => x.Username == "test").First(); //Is this getting executed in the SQL or in memory?
user.Posts; //Posts is an EntityCollection<Post>
Post post = user.Posts.Where(x => x.PostID == "123").First(); //Is this getting executed in the SQL or in memory?

Реализуют ли как ObjectSet, так и EntityCollection IQueryable? Я надеюсь, что они это сделают, чтобы я знал, что запросы выполняются в источнике данных, а не в памяти.

РЕДАКТИРОВАТЬ: Таким образом, очевидно, что EntityCollection не выполняет, в то время как ObjectSet выполняет. Означает ли это, что мне было бы лучше использовать этот код?

    DBEntities db = new DBEntities();
    User user = db.Users.Where(x => x.Username == "test").First(); //Is this getting executed in the SQL or in memory?
    Post post = db.Posts.Where(x => (x.PostID == "123")&&(x.Username == user.Username)).First(); // Querying the object set instead of the entity collection.

Кроме того, в чем разница между ObjectSet и EntityCollection? Разве они не должны быть одинаковыми?

Заранее спасибо!

РЕДАКТИРОВАТЬ: Извините, я новичок в этом. Я пытаюсь понять. Прикрепленные коллекции EntityCollections загружаются лениво, поэтому, если я обращаюсь к ним, память заполняется ими. Вместо того, чтобы делать два запроса к наборам объектов, как в моем последнем редактировании, Мне любопытно, будет ли этот запрос больше того, что мне было нужно:

DBEntities db = new DBEntities();
User user = (from x in db.Users
             from y in x.Posts
             where x.Username == "test"
             where y.PostID == 123
             select x).First();
5
задан Chev 13 January 2011 в 17:55
поделиться