代码之家  ›  专栏  ›  技术社区  ›  Sonic Soul

实体框架,将视图映射到表

  •  2
  • Sonic Soul  · 技术社区  · 14 年前

    我有一个基本视图,它返回与表相同的列(给或取1个字段)

    在DAL代码中,我将返回MyTableObject的列表,但是在某些情况下,我将调用该视图返回相同的数据,但来自不同的源。

    List<MyTableObject> tableObjects = new List<MyTableObject>();
    if (case1)
      tableObjects = entities.MyTableObjects.Where(criteria).ToList();
    else
      tableObjects = entities.MyViewObjects.Where(criteria).ToList(); // <-- This will obviously break
    return tableObjects;
    

    有没有一种方法可以将视图实体映射为表实体?(除了让表和视图实现相同的接口并返回该接口之外)我希望将返回类型保留为MyTableObject。

    我遇见 Auto Mapper ,但不确定它是否适合这种情况。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Community Dan Abramov    7 年前

    看来我找到了一个很酷的解决办法。

    最初我尝试实现接口方法,并遇到一些 casting issues (使用谓词生成器旁边的接口),以及必须为实现接口的每个实体创建部分类的接口。

    答案… POCOS .

    惯用的 Poco Template for EF ,而不是简单地编辑xxxpocogenerator.context.tt从myviews集合返回mytable对象(一行)。

    public ObjectSet<Trade> v_Trade {
            get { return _v_Trade  ?? (_v_Trade = CreateObjectSet<Trade>("Trades")); }
    }
    

    又好又简单。

        2
  •  2
  •   Devart    14 年前

    您可以编写存储过程(或 CommandText 在模型中,不创建db对象),只需调用“select*from view”。然后 create Function Import 并将返回类型设置为MyTableObject。