是否可以将Linq查询从一个数据模型映射到不同数据模型的查询?

时间:2013-01-14 21:02:03

标签: linq entity-framework odata

我想为我的应用程序提供OData接口。我见过的示例使用EF将LINQ查询映射到SQL查询。

恕我直言,这种方法几乎将物理数据库模型暴露给世界(我知道EF / NH提供了一些灵活性,但它是有限的。)

我希望能够做到的是以下内容:

  1. 通过一些DTO定义我的数据合同。
  2. 拥有一个允许用户查询我的数据合同数据的OData服务。
  3. 有一些翻译层可以通过DTO将查询翻译成查询,比如EF模型或NH。
  4. 执行已翻译的查询。
  5. 将结果映射回我的数据合约。
  6. 我是不是想到了这个问题还是解决了这个问题?

2 个答案:

答案 0 :(得分:0)

我有2个模型,“合约”模型和“持久”模型。持久化模型是实体框架映射到的模型。返回IQueryable的Get方法返回一个IQueryable,它只是一行:

return dbContext.PersistedCustomers.Select(x => new Customer(Name = x.OtherName, ...));

至少在使用DbContext而不是ObjectContext时,基于契约模型的条件会自动转换为要对数据库执行的PersistedModel的Where条件。希望两者之间的差异并不复杂,需要一些奇怪的数据按摩。我确信它的逆转是有限制的。

答案 1 :(得分:0)

这样做的一种方法是创建一个代表您的模型的ViewModel,然后使用AutoMapper在它们之间进行映射。您可以这样使用:

   var address = _Context.Addresses.Where(p => p.AddressID == addressID).Single();
   AddressVM result = Mapper.Map<AddressVM>(address);