none
Ef code first 如何映射一个数据视图? RRS feed

  • 问题

  • 如题,在我的项目中,全部都使用的Ef来处理的数据Cud,部分数据控件绑定的时候,需要显示两个类中的字段,我就想如何用code first 来映射一个数据视图,这个类怎么写,应该添加什么约束?

    在网上找资料,只找到了这一篇,http://www.cnblogs.com/lxiang/archive/2012/04/23/2466655.html,关于如何映射视图,但看了没不是很明白,db.database.sqlquery("t-sql")的列子中,根本没有设计与视图对应的两个或多个数据表。

    所以在此请求高人指教~


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/

    2013年1月17日 15:20

答案

  • 你把视图看作表行就行,映射方法与表一样,若视图是可更新视图则与表一样同样支持任何修改,另外如果你只是取数,也可以通过 EF将各表的数据获取后返回一个新的实体只包含你需要的字段。

    关于 EF 映射的详细示例:http://www.dozer.cc/2012/09/entity-framework-code-first-configuring-database-mappings/

    只要满足下列条件,即可通过视图修改基础基表的数据:

    任何修改(包括 UPDATE、INSERT 和 DELETE 语句)都只能引用一个基表的列。
    视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其他方式对这些列进行派生,如通过以下方式:
    聚合函数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR 和 VARP。
    计算。不能从使用其他列的表达式中计算该列。使用集合运算符 UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT 形成的列将计入计算结果,且不可更新。
    被修改的列不受 GROUP BY、HAVING 或 DISTINCT 子句的影响。
    TOP 在视图的 select_statement 中的任何位置都不会与 WITH CHECK OPTION 子句一起使用。



    知识改变命运,奋斗成就人生!

    • 已标记为答案 Dodu.NET 2013年1月18日 4:54
    2013年1月18日 1:43
    版主

全部回复

  • 你把视图看作表行就行,映射方法与表一样,若视图是可更新视图则与表一样同样支持任何修改,另外如果你只是取数,也可以通过 EF将各表的数据获取后返回一个新的实体只包含你需要的字段。

    关于 EF 映射的详细示例:http://www.dozer.cc/2012/09/entity-framework-code-first-configuring-database-mappings/

    只要满足下列条件,即可通过视图修改基础基表的数据:

    任何修改(包括 UPDATE、INSERT 和 DELETE 语句)都只能引用一个基表的列。
    视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其他方式对这些列进行派生,如通过以下方式:
    聚合函数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR 和 VARP。
    计算。不能从使用其他列的表达式中计算该列。使用集合运算符 UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT 形成的列将计入计算结果,且不可更新。
    被修改的列不受 GROUP BY、HAVING 或 DISTINCT 子句的影响。
    TOP 在视图的 select_statement 中的任何位置都不会与 WITH CHECK OPTION 子句一起使用。



    知识改变命运,奋斗成就人生!

    • 已标记为答案 Dodu.NET 2013年1月18日 4:54
    2013年1月18日 1:43
    版主
  • 你好,首先谢谢你的帮助。

    我在系统中想使用视图数据来绑定到数据控件!显示的数据是一个集合,如果是只取一条记录的话仅使用实体类导航属性就可实现。视图是通过关系连接两个或多个表,然后把各个表中的字段都暴漏在这个视图中。我想实现的也就是把各个关联的表中的字段都显示在中个数据控件中。


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/

    2013年1月18日 2:53
  • 你好!

    若你的问题还未解决,能否把你的问题再具体描述清楚一些。比如在某些具体代码上出现了问题?


    知识改变命运,奋斗成就人生!

    2013年1月18日 3:11
    版主
  • 你好,简单点说,现在我是想如何通过ef的实体类,在数据库中映射一个视图对象出来。

    在最开始我给的那个地址中说的是在数据库中手动创建视图,然后通过entity.database.sqlquery("t-sql")实现填充数据到模型,有没有方法是直接通过实体模型类映射出这个视图对象!


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/

    2013年1月18日 3:20
  • 你即然这样想,为何不先定义好一个实体(含多表字段)然后使用 EF 获取数据再填充这个实体呢,这样不是更方便吗?

    知识改变命运,奋斗成就人生!

    2013年1月18日 3:38
    版主
  • 你好,这样是能解决问题,但是在系统完成初期经常会有对数据库重建的情况发生,而每次都要手动重建试图。

    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/

    2013年1月18日 4:07
  • 我上面给你提供的方法不是含视图的哟。

    知识改变命运,奋斗成就人生!

    2013年1月18日 4:47
    版主
  • 呵呵,谢谢了!

    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/

    2013年1月18日 4:54