我正在尝试完成一个项目的设计,并且基本上已经在路上岔路口了。我已经下定决心要使用EF4作为我的数据持久层,但是我现有的数据库给我带来了一些麻烦。不能选择更改或扩充数据库。我有一个真正用于多个目的的表,包含120列(我没有设计这个表!!! - 它是很久以前SQL Server转换后的DB2遗留物)。我设计了一个类图,它可以在不同的聚合级别上从该表创建五个实体。在我对这些情况下要做什么的研究中,我将其缩小到使用MSL层中的“QueryView”或SSDL层中的“DefiningQuery”来创建我需要的实体来自这个monolith表。结果数据只需要是只读的。我更喜欢找回一个合适的实体,但匿名类型或dbdatarecord就可以了。
我试图在我的CSDL中使用我的实体定义MSL中的QueryView,但是当我编译时,MSL不断重新生成并且我的更改丢失了。为什么呢?
任何人都可以提供我应该在这做什么的输入吗?在这种情况下使用DefiningQuery或QueryView更好吗?
。在从数据库或编译更新我的模型后保留这些更改的任何输入都将非常受欢迎。答案 0 :(得分:2)
QueryView
。从数据库更新时,我不确定QueryView
的行为。我确定从数据库执行更新时将删除DefiningQuery
,因为在SSDL中定义了DefiningQuery
,在从数据库更新期间完全删除了QueryView
。通过使用两个不同的EDMX,我有一些自定义DefiningQueries的解决方法 - 一个用于查询,第二个用于从数据库更新的实体。一般概念是described here。
DefiningQuery
和QueryView
之间的差异是包含这些结构的级别。 QueryView
是在现有实体之上构建为自定义ESQL查询的MSL元素,因此您的120列实体必须存在于EDMX中。由于未知原因,DefiningQuery
有no support for aggregations。 {{1}}是SSDL元素构建作为自定义SQL查询。默认情况下,它用于数据库视图(顺便说一下,可能是您的最佳选择)。