【问题标题】:Error Remapping EF Code First TPH Discriminator错误重映射 EF 代码优先 TPH 鉴别器
【发布时间】:2012-03-28 21:01:08
【问题描述】:

我正在尝试重新映射我的 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 语句

我得到错误:

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

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

我正在使用实体框架 4.3.1。

我做错了什么?

【问题讨论】:

    标签: ef-code-first entity-framework-4.3


    【解决方案1】:

    这在 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&lt;DerivedA&gt;Entity&lt;DerivedB&gt; 等的调用,而不是对Entity&lt;MyBase&gt; 的所有调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2023-03-25
      • 2011-06-28
      • 1970-01-01
      • 2012-08-05
      相关资源
      最近更新 更多