我有一个反映100%我的数据库架构的edmx文件。 除此之外,我还需要根据现有实体创建一些自定义实体,非常类似于将多个实体的字段聚合为一个实体的视图。
问题是这不太合适。我尝试了几种方法,但它总是让我与edmx上已有的实际内容发生冲突。
我需要有那些反映我的数据库架构的实体,所以我是否必须创建另一个edmx文件来保存我的自定义entites并避免冒号?
我也是:
有人能指点我一些例子吗?
答案 0 :(得分:2)
我认为你所描述的是一种观点,所以这可能是正确的方法。
您可以使用DefiningQuery节点将视图代码存储在edmx中。您无需在数据库中创建视图。但是,没有设计师支持此功能,您需要手动编辑edmx。如果使用设计器从数据库刷新edmx,则应保留所做的更改。
详细信息:
http://msdn.microsoft.com/en-us/library/cc982038.aspx
在数据库中创建视图会更容易,让设计人员找到并建模它们。
此实体将是只读的,但如果您想通过此视图支持修改,当然可以为UPDATE / INSERT / DELETE分配SP。
答案 1 :(得分:1)
除特殊情况(表拆分,层次结构映射)外,您无法基于同一个表定义两个实体。在这种情况下,您必须使用DefiningQuery作为@James建议或QueryView。区别在于DefiningQuery是在存储模型中定义的,它是常见的SQL。 QueryView在概念模型中定义,它是在已有实体之上定义的ESQL。 QueryView仅支持ESQL的某些功能(例如,它不支持聚合函数)。在这两种情况下,您都必须直接修改EDMX(XML),设计器不支持这些功能。
如果您不想使用这些高级EF功能,@ James提到的数据库视图也是一个选项。您还可以简单地在对象上下文中公开预定义查询,并将返回投影映射到自定义类型。
请注意,这些方法都不允许您修改,插入或删除数据。