在cassandra中处理c#嵌套类

ztyzrc3y  于 2021-06-14  发布在  Cassandra
关注(0)|答案(2)|浏览(365)

我有一个c类,如下所示

public class User
{
    public string UserId { get; set; }
    public string Name { get; set; }

    public List<Address> Address { get; set; }
}

public class Address
{
    public string Line1 { get; set; }
}

我创建了键空间和表,如下所示

ISession session;
        IMapper Mapper;
    Table<User> table;

    var mapping = MappingConfiguration.Global.Define(
                     new Map<User>()
                    .TableName(typeof(User).Name)
                    .PartitionKey(u => u.UserId))

                    ;

        Dictionary<string, string> replication = new Dictionary<string, string>();

        replication.Add("class", "SimpleStrategy");
        replication.Add("replication_factor", "3");
        var cluster = Cluster.Builder()
                                       .AddContactPoints("127.0.1")
                                       .WithPort(9042)
                                       .WithLoadBalancingPolicy(new DCAwareRoundRobinPolicy("test"))
                                       .WithReconnectionPolicy(new FixedReconnectionPolicy(400, 5000, 2 * 60000, 60 * 60000))
                                       .Build();

        session = cluster.Connect();
        session.CreateKeyspaceIfNotExists("demo1", replication);
        session = cluster.Connect("demo1");

        table = new Table<User>(session, mapping, typeof(User).Name, "demo1");
        table.CreateIfNotExists();

我得到以下错误
cassandra.invalidtypeexception:'clr类型cassandra.address的未知cassandra目标类型'

yqlxgs2m

yqlxgs2m1#

你的班级 Address 应该匹配apache cassandra数据库中的字段类型。
在本例中,您可能希望使用用户定义类型(udt)。datastax c#驱动程序不支持创建具有 Table<T>.Create() .
理想情况下,应该首先定义模式,然后根据要用于获取数据的查询对模式进行建模。我建议您首先在cql中这样做,然后在c代码中添加Map配置。

nhaq1z21

nhaq1z212#

请尝试以下操作

var mapping = MappingConfiguration.Global.Define(
                     For<User>()
                    .TableName(typeof(User).Name)
                    .PartitionKey(u => u.UserId);

相关问题