Моя проблема в следующем.
В моем коде есть следующая простая модель:
public class Client
{
public Guid Id { get; set; }
public string Name { get; set; }
}
Я определил для него отображение:
public class CustomMappings : Mappings
{
public CustomMappings()
{
For<Client>().TableName("clients")
.PartitionKey(x => x.Id);
}
}
Я создал таблицу с помощью Table<TEntity>.CreateIfNotExist()
метода:
var table = new Table<Client>(session);
table.CreateIfNotExists();
И я могу вставить свои данные следующим образом:
IMapper mapper = new Mapper(session);
var client = new Client
{
Id = Guid.NewGuid(),
Name = "John Smith"
};
await mapper.UpdateAsync(client);
После этого я изменил свою модель, добавив новое свойство:
public class Client
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
Мне нужно изменить эту таблицу, потому что я хочу добавить в нее столбец фамилии.
Конечно, у меня есть исключение без него, когда я пытаюсь вставить значение:
Cassandra.InvalidQueryException: Undefined column name surname
at Cassandra.Requests.PrepareHandler.Prepare(PrepareRequest request, IInternalSession session, Dictionary`2 triedHosts)
at Cassandra.Requests.PrepareHandler.Prepare(IInternalSession session, Serializer serializer, PrepareRequest request)
at Cassandra.Session.PrepareAsync(String query, IDictionary`2 customPayload)
at Cassandra.Mapping.Statements.StatementFactory.GetStatementAsync(ISession session, Cql cql, Nullable`1 forceNoPrepare)
at Cassandra.Mapping.Mapper.ExecuteAsync(Cql cql)
Но класс Cassandra.Data.Linq.Table<TEntity>
не содержит ни методов, ни .AlterOrCreate()
, ни .Alter()
. Кроме того, у нас нет .GetAlter()
метода в Cassandra.Mapping.Statements.CqlGenerator
.
Какой способ больше подходит для решения этой проблемы? У меня есть два предположения (помимо создания запроса на получение с необходимыми методами для хранилища данных dshastax csharp драйвер на github:)).
- Чтобы изменить таблицы с помощью скрипта cql в файле .cql, который будет выполняться в коде c #.
- Для создания новой таблицы после каждого изменения модели и переноса в нее старых данных.
Я новичок в Кассандре, и у меня есть подозрения, что необходимого метода не существует в библиотеке по уважительной причине. Может быть, есть проблемы с согласованностью после изменения, потому что Cassandra - это распределенная база данных?