如何在实体框架的POCO实现上手动创建复杂类型

时间:2011-10-31 16:54:07

标签: c# entity-framework

我正在使用实体框架,但是关闭了代码生成并使用了我自己的poco类(详见http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx)。到目前为止,这已经很好了,添加实体来公开一堆表来查询,但是我希望暴露存储过程的时候到了。这不是那么简单 - 如何自己编写一个复杂类型,然后将其连接到实体模型?

我在edmx上导入功能参考,我可以将返回类型设置为复杂,甚至单击generate,但这是不可用的,因为我没有使用自动代码生成。所以我需要能够创建自己的,然后将出现在该列表中供我选择,然后能够在我的实体上下文类中创建相应的条目。在线唯一的信息似乎是通过可视化界面生成复杂的类。我不愿意手动编辑edmx文件,因为只有重新生成它才会被删除。

我到目前为止已经尝试过;

  • 将函数添加到我的上下文类中,而不将其放在edmx中;这显然打破了无效的操作异常“在容器'EclipseEntities'中找不到FunctionImport'GetT4OpenCases'。”

  • 将函数添加到edmx,并将返回类型设置为none,然后使用我的手动编码复杂类型将我的函数添加到上下文中,其中我看到另一个无效的operatino异常“存储过程或函数”GetT4OpenCases '没有返回类型.ExecuteFunction只支持具有返回类型的存储过程和函数。“

我不知所措!

感谢。

1 个答案:

答案 0 :(得分:0)

好的,事实证明这很简单 - 在edmx文件中

  • 更新数据模型以包含我想要的存储过程
  • 创建功能导入
  • 在弹出窗口中,选择“创建复杂类型”
  • 创建一个符合相同名称/具有与建议的复杂类型相同的属性的新类
  • 在手动上下文类中添加条目,例如;

    public IEnumerable GetT4Brokers() {     return base.ExecuteFunction(“GetT4Brokers”); }