【问题标题】:ServiceStack Entities Id field nameServiceStack 实体 ID 字段名称
【发布时间】:2012-09-02 00:38:47
【问题描述】:

我使用 ServiceStack 并希望将对象作为哈希存储在 Redis 中,并通过 id 访问它们的部分(字段)而不序列化整个对象,所以我有一个问题:

  1. 有没有办法使用除“Id”之外的其他属性来标记 id 字段?一世 我正在使用命名约定,其中 id 字段的名称类似于“class
    name+Id"。所以在 User 类中会有 UserId id 字段,在
    Itemclass ItemId 等等。

  2. 是一种更新对象中已更改属性的方法 无需将整个对象序列化为哈希,也无需低级 使用 Redis 的 hash 命令进行操作?例如,通过使用 某种 lambdas。

 

User user=client.GetById(userId);
user.Name="New name";
client.Update<User>(user,u=>u.Name);

【问题讨论】:

    标签: hash redis servicestack


    【解决方案1】:

    是的,您可以使用 ModelConfig 覆盖默认设置:

    ModelConfig<User>.Id(x => x.UserId);
    ModelConfig<Item>.Id(x => x.ItemId);
    

    这需要在启动时配置一次,然后才能使用 RedisClient。

    【讨论】:

    • 谢谢你,黛米斯。以前没见过这个功能。使用有点正确: ModelConfig.Id(x=>x.UserId);那么对象的部分保存呢?我试图自己写它,但被困在表达式树中。问题是,如果我使用表达式树,我必须使用 .Compile() 方法,这会减慢保存的执行速度。此外,我不想使用属性名称的魔法字符串将属性保存到哈希...
    • 如果这回答了您的原始问题,请将其标记为已回答。如果您有其他问题,您需要提出一个新问题。明确您的要求,例如,如果它有助于描述您正在寻找的内容,请提供代码示例。
    • 第 N1 部分已回答。 N2 部分没有回答。代码示例在 N2 部分中提供。我想要做的:从 redis 哈希中获取用户对象,更改“名称”属性并仅将“名称”属性保存到哈希中,而不序列化和保存整个用户对象。我可以通过手动将属性序列化为字符串并使用低级哈希函数来做到这一点,但只是看起来像我提供的代码那样更常见和更明显。
    • RedisClient 中的类型化 API 将您的对象作为 JSON 进行 blob。 Hash API 的存储就像一个字符串字典。您可以分别使用每个属性部分更新哈希内容,您不能使用 Blob 对象的 Typed API 执行此操作。注意:我们没有计划在类型化客户端上添加部分更新 API。
    • 如果您想扩展客户端以添加此功能,您可以针对IRedisClient* 接口添加自定义扩展方法。
    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多