小编Len*_*nny的帖子

使用WebApi和映射模型实现OData

我正在尝试在WebApi中实现OData.我正在使用存储库模式和EF5(在后端),这仍然与我找到的所有示例一致.这是事情变得不稳定的地方.我试图隐藏EF生成的类隐藏在控制器中使用AutoMapper映射的模型后面.我看到的例子似乎都归还了回购中的任何内容

我不想在控制器中但在存储库中应用OData参数(已映射的结果)以保留延迟执行的值.我可以将ODataCriteria传递到存储库中,但是当我尝试Appy时,我得到一个错误,因为看起来选项/结果是从表示层而不是IQueryable <EF_Class>键入IQueryable <Model>.

我在另一篇文章中看到其他人没有注意到这一点,但是,它只是帖子的一小部分,似乎没有帮助.

还有其他人处理过这件事吗?我真的不想暴露EF类.哦,我先使用DB.

提前致谢...

c# entity-framework odata asp.net-web-api

9
推荐指数
1
解决办法
3071
查看次数

通用查询方法

尝试通过制作通用GET方法来减少代码中的重复.我正在使用OrmLite及其SQLExpressionVisitor更新...目标是传入lambda.我已经看过其他一些我希望会有所帮助的帖子,但到目前为止,没有去......显然问题是我如何在ev.Where声明中尝试评估标准,但解决方案正在逃避我. ..

提前谢谢...... -Lenny

public IQueryable<T> Get<T>(Predicate<T> criteria)
{
  using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
    {
     SqlExpressionVisitor<T> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<T>();
     ev.Where(x => criteria.Invoke(x))
     return db.Select(ev).AsQueryable();
    }
 }
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误......从范围''引用的'TW.Api.Models.CostCenter'类型的变量'x',但它没有定义

这是一个有效但不通用的代码示例....

public IQueryable<CostCenter> Get(Identity user)
{
    using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
      {
        SqlExpressionVisitor<CostCenter> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<CostCenter>();
        ev.Where(x => x.OrgId == user.OrgId);
        ev.Where(x => x.VisibilityStockpointId == user.StockpointId);``
        return db.Select(ev).AsQueryable();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我上面引用的模型......

[Alias("CostCenterDetail")]
public class CostCenter
{
    public Guid Id { get; set; }
    public Guid StockpointId { get; set; }
    public virtual Guid? …
Run Code Online (Sandbox Code Playgroud)

c# generics predicate ormlite-servicestack

6
推荐指数
1
解决办法
739
查看次数