Универсальная функция обновления для исключения Cassandra - PullRequest
0 голосов
/ 20 марта 2019

Я создаю общий репозиторий для Cassandra Db, используя драйвер DataStax C # и его функции Linq. Общая функция обновления выглядит следующим образом:

 public interface ICassandraRepository<T>
    {
Task<CrudResult> UpdateAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, T>> selector);        
    }

и его реализация выглядит следующим образом:

    public class CassandraRepository<T> : ICassandraRepository<T>
    {
     protected readonly ISession _session;
            protected readonly IMapper _mapper;

     public async Task<bool> UpdateAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, T>> selector)
            {
                try
                {
                    var table = new Table<T>(_session);
                    await table.Where(predicate).Select(selector).Update().ExecuteAsync();

                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
    }

если у меня есть такой класс сущности:

      [Table("titles")]
        public class Title
        {
            [PartitionKey()]
            [Column("title_id")]
            public Guid TitleId { get; set; }

            [Column("title_name")]
            public string TitleName { get; set; }
}

когда я вызываю этот общий метод обновления, используя вот так, он обновляется Ok:

 public async Task<bool> UpdateTitle(Title title)
                {
        private readonly ICassandraRepository<Title> _titleRepo;

       return await _titleRepo.UpdateAsync(p => p.TitleId == title.TitleId, 
        s => new Title {TitleName = title.TitleName} );
                }

но когда я вызываю его следующим образом, я получаю исключение "Не определено отображение для member: title"

    public async Task<bool> UpdateTitle(Title title)
            {
    private readonly ICassandraRepository<Title> _titleRepo;
                return await _titleRepo.UpdateAsync(p => p.TitleId == 
       title.TitleId, s => title);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...