【问题标题】:CassandraEntityBase in C# DataStax DriverC# DataStax 驱动程序中的 CassandraEntityBase
【发布时间】:2019-12-27 14:26:23
【问题描述】:

我有一个 .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 ?

【问题讨论】:

    标签: c# cassandra cassandra-driver


    【解决方案1】:

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

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

    什么是 CanWrite?

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

    来源:PropertyInfo.CanWrite Property

    因为我的属性是只读的

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

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

    public  TimeUuid Id { get; set;}
    

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

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 2017-01-31
      • 2017-08-04
      • 2021-01-24
      • 2016-02-27
      • 2017-01-20
      • 2017-01-26
      • 2022-12-11
      • 2016-11-29
      相关资源
      最近更新 更多