C# DataStax 驱动程序中的 CassandraEntityBase

CassandraEntityBase in C# DataStax Driver

我有一个 .net 核心应用程序,它通过 DataStax 驱动程序将数据保存到 Cassandra 实例。

我的 Cassandra 实体有一个基础 class。现在,如果我想将我的 TimeUUID 类型 ID 放入此基 class,插入时会出现错误:

Some partition key parts are missing: id

同样的方法适用于 EntityFramework。而且问题不在于我的表、连接或键空间,因为当我将 id 字段带回实体本身时,它起作用了。

我的插入方法

public void Insert<T>(T entity) where T : EntityBase
{
    _mapper.Insert(entity);
}

我的基地class

public class EntityBase
{
    [Column(name: "id")]
    public  TimeUuid Id { get; private set; } = TimeUuid.NewId();
}

继承基础 class

的实体 class
[Table(Keyspace = "unimportant", Name = "irrelevant")]
public class Irrelevant : EntityBase
{
    //fields
}

你能告诉我有什么问题吗?有没有办法声明 CassandraEntityBaseClass ?

找到了。这是故意的。在PocoDataFactory.cs第102行我找到了它:

return t.GetTypeInfo().GetProperties(PublicInstanceBindingFlags).Where(p => p.CanWrite);

什么是 CanWrite?

Gets a value indicating whether the property can be written to.

来源:PropertyInfo.CanWrite Property

因为我的 属性 是只读的

public  TimeUuid Id { get; private set; } = TimeUuid.NewId();

我重写了我的代码(仅用于测试)如下,它成功了:

public  TimeUuid Id { get; set;}

我现在选择在存储库或对象 ctor 插入期间设置我的 属性。