EF, всместо одной записи извлекаются все
От: Аноним  
Дата: 28.01.11 15:51
Оценка:
Проблема: из базы вместо одной записи извлекаются ВСЕ.

У меня есть общий класс репозитория

public class Repository<T> : IRepository<T> where T : class
    {
        MyDataContext context; // наследник ObjectContext
        ObjectSet<T> objectSet;

        public Repository(MyDataContext context, ObjectSet<T> objectSet) // ctor
        {
            // validate 
            if (context == null) throw new ArgumentNullException("context");
            if (objectSet == null) throw new ArgumentNullException("objectSet");

            this.context = context;
            this.objectSet = objectSet;
        }

        public ObjectSet<T> ObjectSet {
            get { return objectSet; }
        }

        public IEnumerable<T> GetAll() {
           return objectSet.ToList();
        }

        public IEnumerable<T> Find(Func<T, bool> where) {
            return objectSet.Where<T>(where);
        }

        public T Single(Func<T, bool> where) {
            return objectSet.Where(where).Single(); // .Single<T>(where);
        }

...


Вот конкретная реализация этого класса

public class PersonRepository : Repository<Person>
    {
        MyDataContext context;

        public PersonRepository(MyDataContext context) : base(context, context.PersonSet) // ctor
        {
            // validate 
            if (context == null) throw new ArgumentNullException("context");

            this.context = context;
        }


Я это дело использую так:

using (MyDataContext ctx = ... create new contex object ...) {
     // 1
                PersonRepository rep = new PersonRepository (ctx);
                Person p = rep.Single(x => x.ID == id);
     // 2
                Person p = ctx.PersonSet.Where(x => x.ID == id).Single();
}


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

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