如何使用Datastax C#Driver将C#enum映射到Cassandra字段?

时间:2016-11-10 10:57:50

标签: c# enums cassandra datastax

我想使用Datastax C#Driver(.Net Framework 4.6.1,Datastax C#Driver 3.0.8)在Cassandra中保存和检索POCO对象

示例:

public enum DocumentState
{
    New = 0,
    Approved = 1,
    Rejected = 2
}

public class DocumentReadModel
{
    public Guid DocumentId { get; set; }
    public DocumentState State { get; set; }
}

在Cassandra中保留此对象的最佳方法是什么?

我的方法似乎不起作用。

现在我试图在Cassandra中将其保存为int:

create table if not exists documentreadmodel (
        documentid uuid PRIMARY KEY,
        state int);

还使用Datastax驱动程序提供的映射配置,代码如下:

MappingConfiguration.Global.Define(
    new Map<DocumentReadModel>()
            .TableName("documentreadmodel")
            .PartitionKey(o => o.MerchantId)
            .Column(o => o.State, c =>     c.WithName("state").WithDbType<int>()));

但我仍然有例外:

Cassandra.InvalidTypeException: 
Unknown Cassandra target type for CLR type ValueObjects.DocumentState

我应该在Cassandra中使用另一种类型的int吗? 以不同方式配置驱动程序?

1 个答案:

答案 0 :(得分:0)

我通过更新全局配置以使用For

找到了解决方案

我使用的是.NET 4.5.2 CassandraCSharpDriver 3.3.2

尝试更新您的配置以使用&#34;对于&#34;

MappingConfiguration.Global.Define(
For<DocumentReadModel>()
        .TableName("documentreadmodel")
        .PartitionKey(o => o.MerchantId)
        .Column(o => o.State, c => c.WithName("state").WithDbType<int>()));