代码之家  ›  专栏  ›  技术社区  ›  Arnis Lapsa

L2Entities、存储过程和映射

  •  1
  • Arnis Lapsa  · 技术社区  · 16 年前

    最后签出了L2E框架,几乎立刻遇到了问题。
    是的,我知道…我以前应该读一些书。

    情况:

    具有props->id和name的实体。
    实体映射到表,该表具有ID和名称列。
    存储过程,只返回id列。

    问题:

    ObjectResult<MyProp> result = _container.MyStoredProcedure(uberParameter);
    

    调用此将导致错误

    [这里是有罪方法]引发异常: System.Data.EntityCommandExecutionException:数据读取器与指定的“database.MyPropTableObject”不兼容。类型“name”的成员在数据读取器中没有同名的对应列。

    问题2:

    不能“只返回”该字段,因为该列具有XML数据类型,但存储过程使用了花哨的select语句,这会导致:

    消息421,级别16,状态1,行1 XML数据类型不能选择为distinct,因为它不可比较。

    问题:
    是否可以仅为此存储过程关闭此实体属性的映射?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Mark Dickinson    16 年前

    问题1是由于进程没有用于填充实体的列。如果已经映射了表,就不需要proc,只需使用linq从中选择所需的字段。

    var result = MyEntities.EntityIMapped.First(r => r.id = uberParameter).Name;
    

    将从表的name列中为给定的ID提供值。您不需要为此使用存储过程。

    问题2听起来像是在过程中,我认为XML数据列上的不同会产生很多结果,但我只是猜测,因为我不知道您的解决方案。

    这不是你问题的直接答案,但希望它能为你指明正确的方向。