【问题标题】:EF4 Custom Entities within the same edmx同一 edmx 中的 EF4 自定义实体
【发布时间】:2011-02-08 11:25:51
【问题描述】:

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

问题是这不太有效。我尝试了几种方法,但它总是让我与 edmx 上已经存在的实际实体发生冲突。

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

我也想过:

  • 创建一个存储过程,但是如果 我需要过滤我的 SP 结果 伊瑟必须添加对 serach 的支持 在获取所有行的 SP 和 用 Linq2Objects 过滤......不会 这个!
  • 创建一个视图,这个视图将 工作得很好,但我想试试 使用 EF4 来做到这一点 设计师并将一切合二为一 地点。

谁能给我举一些例子?

【问题讨论】:

    标签: c# entity-framework-4


    【解决方案1】:

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

    您可以使用 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 用于直接在数据库中创建视图。为什么不利用已有的东西?
    • 是的,就像我上面说的,创建视图是我唯一的选择,但我认为 EF4 支持这种要求,我错过了一些东西。我不喜欢改变 edmx 胆量的想法……这种事情会在你最意想不到的时候吹到你的手上。
    • 大声笑.. 设计师正在把我们变成懒惰的程序员。这只是一点点xml。仅使用设计器并不能获得 EF 的所有功能,并且设计器有一些在任何情况下都会爆炸的错误。全面了解 xml 会更好。上面有一些非常好的架构文档(请参阅此处链接的 CDSL 规范等 - msdn.microsoft.com/en-us/library/cc982042.aspx
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多