实体框架——是否有可能将来自一个数据模型的Linq查询映射到不同数据模型上的查询



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

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

我希望我能做的是:

  1. 通过dto定义我的数据合同。
  2. 有一个OData Service,可以让用户查询我的数据合同Dtos。
  3. 有一些翻译层将dto上的查询转换为EF模型或NH上的查询。
  4. 执行翻译后的查询
  5. 将结果映射回我的数据合同。
是我疯了还是有办法解决这个问题?

我有两个模型,"合同"模型和"持久"模型。持久化模型是实体框架映射到的对象。Get方法返回一个IQueryable返回一个IQueryable也就是这样的东西

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

至少在使用DbContext而不是ObjectContext时,基于契约模型的Where标准被自动转换为要对数据库执行的PersistedModel的Where标准。希望两者之间的差异没有复杂到需要一些奇怪的数据处理的程度。我相信它的逆转作用是有限的。

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

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

相关内容

最新更新