4

我正在使用 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”与 EntitySet“FoosViews”中的“EntityFramework.SqlServerModel.FoosView”类型不匹配。

有什么建议么?

4

2 回答 2

3

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

  1. 您的存储模型应具有:
    1. EntitySetsFooFooView
    2. EntityTypesFooFooView
  2. 你的概念模型应该有:
    1. 两个EntitySets:FooFooView-设置EntityTypeModelName.Foo
    2. EntityTypeFoo
  3. 您的映射应该有两个EntitySetMappings
    1. Foo一个EntityTypeMapping(“ModelName.Foo”) 一个MappingFragment(“Foo”)
    2. FooView一个EntityTypeMapping(“ModelName.Foo ”)一个(“ FooViewMappingFragment ”)

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

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

您可以通过执行以下操作让自己领先一步:

  1. 添加FooFooView到您的模型
  2. Mapping DetailsFoo单击Add a Table or View并选择FooView
  3. FooView从模型中删除
  4. 保存模型并在 XML 编辑器中打开它
  5. RTM 之前查找<EntityType Name="FooView"><StorageModels>删除任何不正确的条目<Key>(它应该匹配<EntityType Name="Foo">
  6. 删除<EntityTypeMapping Name="IsTypeOf(Foo)" />and <EntityTypeMapping Name="IsTypeOf(FooView)" />(它们导致了我的错误)

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

于 2010-01-15T10:02:10.617 回答
1

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

于 2010-01-11T12:57:34.240 回答