0

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

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

我希望能够做的事情如下:

  1. 通过一些 DTO 定义我的数据合同。
  2. 拥有一个 OData 服务,可以让用户查询我的数据合同 Dto。
  3. 有一些翻译层将 DTO 上的查询转换为查询,例如 EF 模型或 NH。
  4. 执行翻译后的查询。
  5. 将结果映射回我的数据合同。

我是疯了还是有解决这个问题的方法?

4

2 回答 2

0

我有 2 个模型,“合同”模型和“持久”模型。持久化模型是实体框架映射到的。返回 IQueryable 的 Get 方法返回一个 IQueryable,它类似于以下内容:

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

至少在使用 DbContext 而不是 ObjectContext 时,基于合同模型的 Where 标准会自动转换为 PersistedModel 的 Where 标准,以针对数据库执行。希望两者之间的差异不会那么复杂,以至于您需要一些奇怪的数据按摩。我敢肯定它的逆转是有限度的。

于 2013-01-15T15:35:37.127 回答
0

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

   var address = _Context.Addresses.Where(p => p.AddressID == addressID).Single();
   AddressVM result = Mapper.Map<AddressVM>(address);
于 2013-01-15T15:38:36.950 回答