我想为我的应用程序提供OData接口。我见过的示例使用EF将LINQ查询映射到SQL查询。
恕我直言,这种方法几乎将物理数据库模型暴露给世界(我知道EF / NH提供了一些灵活性,但它是有限的。)
我希望能够做到的是以下内容:
我是不是想到了这个问题还是解决了这个问题?
答案 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);