【问题标题】:Entity Framework v4 -> need some help with POCO's and Entities实体框架 v4 -> 需要一些关于 POCO 和实体的帮助
【发布时间】:2010-12-31 22:15:47
【问题描述】:

我正在使用 EF4,我有两个实体希望映射到 相同 POCO。我不确定我该怎么做。

实体 1 → Foo(这表示 db 中的表 FOO)
POCO → Foo

实体 2 → FooView(这表示 db 中的视图 FooView)
POCO → Foo

我知道我需要做类似的事情

IObjectSet<Foo> _foos = CreateObjectSet<Foo>();

// Note spelling of the Entity.
IObjectSet<Foo> _foosView = CreateObjectSet<Foo>("FooViews"); 

但是当我尝试这个时,它会编译,但它会失败并出现以下异常:

System.ArgumentException: System.ArgumentException:指定的实体类型,'MyProject.Core.Foo', 与“EntityFramework.SqlServerModel.FoosView”类型不匹配 来自 EntitySet 'FoosViews'。

有什么建议吗?

【问题讨论】:

    标签: c# .net poco entities


    【解决方案1】:

    以下是要查找的事项清单:

    1. 您的存储模型应该有:
      1. 两个EntitySetsFooFooView
      2. 两个EntityTypesFooFooView
    2. 您的概念模型应该有:
      1. 两个EntitySetsFooFooView - 两者EntityType 设置为ModelName.Foo
      2. 一个EntityType:Foo
    3. 您的映射应该有两个EntitySetMappings
      1. Foo 和一个 EntityTypeMapping ("ModelName.Foo") 和一个 MappingFragment ("Foo")
      2. FooView 和一个 EntityTypeMapping ("ModelName.Foo") 和一个 MappingFragment ("FooView")

    您应该能够执行以下操作:

    Foo foo = new ModelEntities()
        .CreateObjectSet<Foo>("FooView")
        .First();
    

    您可以通过以下方式让自己领先一步:

    1. FooFooView 添加到您的模型中
    2. FooMapping Details 中单击Add a Table or View 并选择FooView
    3. 从您的模型中删除 FooView
    4. 保存模型并在 XML 编辑器中打开它
    5. (pre-RTM)&lt;StorageModels&gt; 中查找&lt;EntityType Name="FooView"&gt; 并从&lt;Key&gt; 中删除任何不正确的条目(它应该与&lt;EntityType Name="Foo"&gt; 匹配)
    6. 删除&lt;EntityTypeMapping Name="IsTypeOf(Foo)" /&gt;&lt;EntityTypeMapping Name="IsTypeOf(FooView)" /&gt;(它们导致我出错)

    从 beta 2 开始,实现上述内容会破坏设计者

    【讨论】:

    • 嗨,理查德 - 非常感谢这篇文章。这里有很多数据,所以我会在时间用完之前尽快解决这个问题。在您的第一步中,您是说我创建了两个 poco - 一个名为 Foo 和另一个 FooView ?另外,当你的帖子谈到entity types 时,这就是我所说的我的 POCO 课程吗?和multiple entity sets,这意味着我的 tables 在我的设计器上(例如,table Foo 和 view FooView)?
    • 在我的示例中,我没有使用 POCO,但概念是相同的。主要是保留两个独立的实体集,以及两个不同的 storage EntityType,但只有一个 conceptual EntityType。
    • 概念实体类型也与您的 POCO 相同。 Storage EntityTypes 是数据库表的表示。
    • Richard,由于 EF4 Beta2 中的错误,我无法通过第二步(有传言说它已在 RTM 中修复:social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/…)也就是说,如果我更改 xml 文件,将如果我从数据库刷新/更新设计器,这会被重置?
    • 不管怎样,只要继续通过第 2 步(您会看到第 5 步中涵盖了关键问题)。不,我认为您必须明确要求它更新视图。
    【解决方案2】:

    在 NHibernate 中,应该使用 Projections 来解决这个问题。 所以,我认为实体框架中一定存在类似的东西。我用谷歌搜索了一下,我遇到了这个:

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多