仅获取特定 Ravendb 文档的一部分
Getting only a part of a specific Ravendb document
是否可以只加载 Ravendb 文档的一部分。
我想通过 id 获取文档,但应该只获取一些字段。
我知道我可以将 session.Query
与 Select
调用一起使用,但是我无法查询文档的 ID,因此我必须改用 session.Load
,但这会获取整个文档.
我需要为此创建索引吗?
您可以使用名为 Results Transformers 的东西来实现此目的。
假设你有一个实体"Customer"
public class Customer
{
public string Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
}
并且您只想加载 ID 和名称 属性,您定义了一个结果转换器:
public class CustomerNameTransformer : AbstractTransformerCreationTask<Customer>
{
public CustomerNameTransformer()
{
TransformResults = results => from customer in results
select new CustomerNameViewModel
{
Id = customer.Id,
Name = customer.Name
};
}
}
和你的 "view model":
public class CustomerNameViewModel
{
public string Id { get; set; }
public string Name { get; set; }
}
有了这个,您可以通过多种方式将客户实体作为 "Customer Name ViewModel" 访问:
//Load and transform by one id
CustomerNameViewModel viewModel = session.Load<CustomerNameTransformer, CustomerNameViewModel>("customers/1");
//Load and transform by several id's
CustomerNameViewModel[] viewModels = session.Load<CustomerNameTransformer, CustomerNameViewModel>(new[]{ "customers/1", "customers/2"});
//Query and transform
List<CustomerNameViewModel> viewModels = session.Query<Customer>()
.TransformWith<CustomerNameTransformer, CustomerNameViewModel>()
.ToList();
结果转换器在数据返回给客户端之前在服务器端执行。它们由在服务器上创建索引定义的同一 IndexCreation 任务创建。
您可以在文档中阅读有关结果转换器的更多信息:
希望对您有所帮助!
是否可以只加载 Ravendb 文档的一部分。
我想通过 id 获取文档,但应该只获取一些字段。
我知道我可以将 session.Query
与 Select
调用一起使用,但是我无法查询文档的 ID,因此我必须改用 session.Load
,但这会获取整个文档.
我需要为此创建索引吗?
您可以使用名为 Results Transformers 的东西来实现此目的。
假设你有一个实体"Customer"
public class Customer
{
public string Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
}
并且您只想加载 ID 和名称 属性,您定义了一个结果转换器:
public class CustomerNameTransformer : AbstractTransformerCreationTask<Customer>
{
public CustomerNameTransformer()
{
TransformResults = results => from customer in results
select new CustomerNameViewModel
{
Id = customer.Id,
Name = customer.Name
};
}
}
和你的 "view model":
public class CustomerNameViewModel
{
public string Id { get; set; }
public string Name { get; set; }
}
有了这个,您可以通过多种方式将客户实体作为 "Customer Name ViewModel" 访问:
//Load and transform by one id
CustomerNameViewModel viewModel = session.Load<CustomerNameTransformer, CustomerNameViewModel>("customers/1");
//Load and transform by several id's
CustomerNameViewModel[] viewModels = session.Load<CustomerNameTransformer, CustomerNameViewModel>(new[]{ "customers/1", "customers/2"});
//Query and transform
List<CustomerNameViewModel> viewModels = session.Query<Customer>()
.TransformWith<CustomerNameTransformer, CustomerNameViewModel>()
.ToList();
结果转换器在数据返回给客户端之前在服务器端执行。它们由在服务器上创建索引定义的同一 IndexCreation 任务创建。
您可以在文档中阅读有关结果转换器的更多信息:
希望对您有所帮助!