Я впервые использую 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();