3

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

我的 Cassandra 实体有一个基类。现在,如果我想将我的 TimeUUID 类型 id 带入这个基类,插入时会出现错误:

Some partition key parts are missing: id

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

我的插入方法

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

我的基类

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

继承基类的实体类

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

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

4

1 回答 1

3

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

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

什么是 CanWrite ?

获取一个值,该值指示是否可以写入该属性。

来源:PropertyInfo.CanWrite 属性

因为我的财产是只读的

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

我重写了我的代码(仅用于测试),如下所示:

public  TimeUuid Id { get; set;}

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

于 2019-08-22T12:31:26.057 回答