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 插入期间设置我的 属性。
我有一个 .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 插入期间设置我的 属性。