Я создаю общий репозиторий для 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);
}