3

我正在尝试重新映射我的 TPH 持久对象层次结构的描述符列,如下所述:

http://msdn.microsoft.com/en-us/library/hh295845(v=vs.103).aspx

http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

https://stackoverflow.com/a/6650064/141172

当我使用以下任一变体进行映射时:

modelBuilder.Entity<MyBase>()
            .Map<MyBase>(m => m.Requires("TypeId").HasValue(0))
            .Map<DerivedA>(m => m.Requires("TypeId").HasValue(1))
            .Map<DerivedB>(m => m.Requires("TypeId").HasValue(2))
            .Map<DerivedC>(m => m.Requires("TypeId").HasValue(3))
            .Map<DerivedD>(m => m.Requires("TypeId").HasValue(4));

或者

modelBuilder.Entity<MyBase>()
            .Map<MyBase>(m => m.Requires("TypeId").HasValue(0));
modelBuilder.Entity<MyBase>()
            .Map<DerivedA>(m => m.Requires("TypeId").HasValue(1));
modelBuilder.Entity<MyBase>()
            .Map<DerivedB>(m => m.Requires("TypeId").HasValue(2));
modelBuilder.Entity<MyBase>()
            .Map<DerivedC>(m => m.Requires("TypeId").HasValue(3));
modelBuilder.Entity<MyBase>()
            .Map<DerivedD>(m => m.Requires("TypeId").HasValue(4));

具有以下变化:

  • 使用字符串而不是整数,例如“1”
  • 删除 MyBase 的 Map 语句

我得到错误:

对于类型“DerivedA”,Map 被多次调用,并且至少有一个调用未指定目标表名称。

所有派生类都直接继承自 MyBase,并且所有派生类都包含在映射中。

我正在使用实体框架 4.3.1。

我究竟做错了什么?

4

1 回答 1

7

这在 EF5-beta2 中已修复,其中链式 Map 调用应该可以工作。

在 EF 4.3 中,您需要将每个 Map 调用拆分为适用于实体类型的 EntityTypeConfiguration 。

modelBuilder.Entity<MyBase>() 
        .Map<MyBase>(m => m.Requires("TypeId").HasValue(0)); 
modelBuilder.Entity<DerivedA>() 
        .Map<DerivedA>(m => m.Requires("TypeId").HasValue(1)); 
modelBuilder.Entity<DerivedB>() 
        .Map<DerivedB>(m => m.Requires("TypeId").HasValue(2)); 
modelBuilder.Entity<DerivedC>() 
        .Map<DerivedC>(m => m.Requires("TypeId").HasValue(3)); 
modelBuilder.Entity<DerivedD>() 
        .Map<DerivedD>(m => m.Requires("TypeId").HasValue(4)); 

注意对 , 等的调用Entity<DerivedA>Entity<DerivedB>而不是对的调用Entity<MyBase>

于 2012-04-04T22:13:59.530 回答