我正在玩Raven DB几天,我想将它用作我的Web聊天应用程序的存储空间.我有包含一些用户数据和聊天记录的文档 - 这是大收集聊天消息.
每次加载用户文档时,聊天记录也会被加载,即使我只需要几个字段,如:用户名,密码和电子邮件.
我的问题是:如何只从数据库加载部分文件?
Aye*_*ien 31
托梅克,
您无法加载部分文档,但可以加载投影.
session.Query<User>()
.Where(x=>x.Name == name)
.Select( x=> new { x.Name, x.Email });
Run Code Online (Sandbox Code Playgroud)
这将只加载适当的字段
小智 5
据我所见,您可以执行此操作(基于上面的原始“用户”场景):
public class UserSummary
{
public string Name { get; set; }
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
documentSession.Query<User>().AsProjection<UserSummary>();
Run Code Online (Sandbox Code Playgroud)
查看 Raven 服务器,它会将以下内容作为查询的一部分输出:
?query=&pageSize=128&fetch=Name&fetch=Email&fetch=Id
Run Code Online (Sandbox Code Playgroud)
所以看起来它只查询并返回原始对象的子集,这很好。
这也有效:
documentSession.Query<User>().Select( x=> new User { Name = x.Name, Email= x.Email })
Run Code Online (Sandbox Code Playgroud)
但我认为这不像返回 UserSummary 对象那么干净。
对那些发布回复的人提出一些后续问题:
RaccoonBlog 的链接有以下示例:
该方法会优于 .AsProjection() 吗?这两种方法有什么区别?
| 归档时间: |
|
| 查看次数: |
1851 次 |
| 最近记录: |