同一个edmx中的EF4自定义实体

时间:2011-02-08 11:25:51

标签: c# entity-framework-4

我有一个反映100%我的数据库架构的edmx文件。 除此之外,我还需要根据现有实体创建一些自定义实体,非常类似于将多个实体的字段聚合为一个实体的视图。

问题是这不太合适。我尝试了几种方法,但它总是让我与edmx上已有的实际内容发生冲突。

我需要有那些反映我的数据库架构的实体,所以我是否必须创建另一个edmx文件来保存我的自定义entites并避免冒号?

我也是:

  • 创建存储过程但是如果 我需要过滤SP结果I. eather必须增加对serach的支持 在获取所有行的SP上 使用Linq2Objects过滤...不会这样做 此<!/ LI>
  • 创建一个视图,这个会 工作得很好,但我想尝试 这样做是利用EF4 设计师并将所有东西集于一身 的地方。

有人能指点我一些例子吗?

2 个答案:

答案 0 :(得分:2)

我认为你所描述的是一种观点,所以这可能是正确的方法。

您可以使用DefiningQuery节点将视图代码存储在edmx中。您无需在数据库中创建视图。但是,没有设计师支持此功能,您需要手动编辑edmx。如果使用设计器从数据库刷新edmx,则应保留所做的更改。

详细信息:

http://msdn.microsoft.com/en-us/library/cc982038.aspx

http://blogs.msdn.com/b/davidebb/archive/2010/10/01/the-easy-way-to-create-an-entity-framework-defining-query.aspx

在数据库中创建视图会更容易,让设计人员找到并建模它们。

此实体将是只读的,但如果您想通过此视图支持修改,当然可以为UPDATE / INSERT / DELETE分配SP。

答案 1 :(得分:1)

除特殊情况(表拆分,层次结构映射)外,您无法基于同一个表定义两个实体。在这种情况下,您必须使用DefiningQuery作为@James建议或QueryView。区别在于DefiningQuery是在存储模型中定义的,它是常见的SQL。 QueryView在概念模型中定义,它是在已有实体之上定义的ESQL。 QueryView仅支持ESQL的某些功能(例如,它不支持聚合函数)。在这两种情况下,您都必须直接修改EDMX(XML),设计器不支持这些功能。

如果您不想使用这些高级EF功能,@ James提到的数据库视图也是一个选项。您还可以简单地在对象上下文中公开预定义查询,并将返回投影映射到自定义类型。

请注意,这些方法都不允许您修改,插入或删除数据。