Я впервые использую Entity Framework и заметил, что объект entity возвращает коллекции сущностей.
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?
Реализуют ли IQueryable и ObjectSet, и EntityCollection?Я надеюсь, что они делают так, чтобы я знал, что запросы выполняются в источнике данных, а не в памяти.
РЕДАКТИРОВАТЬ: Так что, очевидно, 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();