powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Реализация Repository Pattern в Entitry Framework и проблема кэширования
3 сообщений из 3, страница 1 из 1
Реализация Repository Pattern в Entitry Framework и проблема кэширования
    #39255945
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос - как реализовать метод GetByIdNoTracking , пояснения ниже:

Есть у меня таков вот стандартный генериковый мини-репозиторий
Код: c#
1.
2.
3.
4.
5.
6.
7.
       
    public interface IRepository<TEntity, TKey> where TEntity : BaseEntity<TKey> where TKey : struct
    {
        TEntity GetById( TKey id );

        IQueryable<TEntity> GetAll();
    }



И его реализация

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        
        public IQueryable<TEntity> GetAll()
        {
            return _context.Set<TEntity>().AsQueryable();
        }

        public TEntity GetById( TKey id )
        {
            return _context.Set<TEntity>().Find( id );
        }



Возникает необходимость извлекать некэшированные ранее данные (реализация выше выведет кэшированные строки, если таковые извлекались), добавляем необходимый методы при помощи операции AsNoTracking()

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
        public IQueryable<TEntity> GetAllNoTracking()
        {
            return _context.Set<TEntity>().AsNoTracking();
        }

        public TEntity GetByIdNoTracking( TKey id )
        {
            throw new Exception( "????" );
        }



Собственно повторно вопрос: как реализовать метод GetByIdNoTracking

Так ошибка компиляции "Operator '==' cannot be applied to operands of type 'TKey' and 'TKey'"
Код: c#
1.
2.
3.
4.
        public TEntity GetByIdNoTracking( TKey id )
        {
            return _context.Set<TEntity>().AsNoTracking().FirstOrDefault( w => w.Id == id );
        }


А так ошибка в рантайме невозможности сравнения объектов
Код: c#
1.
2.
3.
4.
        public TEntity GetByIdNoTracking( TKey id )
        {
            return _context.Set<TEntity>().AsNoTracking().FirstOrDefault( w => w.Id.Equals(id) );            
        }
...
Рейтинг: 0 / 0
Реализация Repository Pattern в Entitry Framework и проблема кэширования
    #39256055
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут пишут, что можно так:
Код: c#
1.
2.
3.
4.
        public TEntity GetByIdNoTracking( TKey id )
        {
            return _context.Set<TEntity>().AsNoTracking().FirstOrDefault(w => (object)w.Id == (object)id );
        }
...
Рейтинг: 0 / 0
Реализация Repository Pattern в Entitry Framework и проблема кэширования
    #39256227
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Спасибо! Действительно работает.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Реализация Repository Pattern в Entitry Framework и проблема кэширования
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]