在EF 4.3.1代码中首先映射继承层次结构始终使用Map方法失败

时间:2012-05-29 15:40:31

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

简单的测试项目来自Julia Lerman的EF Code First书中的例子。使用Map方法时,没有一个示例可以使用TPH,TPT或TPC,但没有。 EF的其他方面(我有一个部分开发的应用程序)似乎工作正常。我正在使用VS 2010 / .NET 4以及所有最新更新,我甚至在今天修复了VS安装。

以下TPH示例抛出InvalidOperationException - “类型'Child'多次调用Map,并且至少有一个调用没有指定目标表名。”

using System.Linq;
using System.Data.Entity;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
            var children = new Context().Set<Child>().ToList();
        }
    }

    public class Parent
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class Child : Parent
    {
    }

    public class Context : DbContext
    {
        DbSet<Parent> Parents { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Parent>()
                .Map(m =>
                    {
                        m.Requires("EntityType").HasValue("Parent");
                        m.ToTable("Families");
                    })
            .Map<Child>(m => m.Requires("EntityType").HasValue("Child"));
        }
    }
}

另一个例子,TPT这次抛出“类型'Child'已经映射到表'Children'。在一个Map调用中指定表的所有映射方面。”

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Parent>()
                .Map(m => m.ToTable("Families"))
                .Map<Child>(m => m.ToTable("Children"));
        }

最后一个例子,TPC,抛出类似的“类型'Child'已经映射到表'Children'。在一个Map调用中指定表的所有映射方面。”

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Parent>()
                .Map(m => m.ToTable("Families"))
                .Map<Child>(m =>
                    {
                        m.ToTable("Children");
                        m.MapInheritedProperties();
                    });
        }

我也尝试过其他许多类似的结果。要么我缺少一些非常基本的东西,要么我怀疑我有安装/配置问题。我的PC也安装了VS2008,几个月前我做了很多重新配置SQL Server,因为我安装了4个不同的版本。我现在正在使用2008 R2 Express。

是否有人看到类似或有任何想法如何跟踪/调试EF中发生的事情?

1 个答案:

答案 0 :(得分:0)

在这里找到答案...... Entity Framework 4.3 - TPH mapping and migration error

... 这是4.3和4.3.1的已知问题。 (我们发现将修复程序放在4.3.1中为时已晚。)

... 简而言之,您曾经能够在4.1中的单个EntityConfiguration上进行链式地图调用。和4.2

值得庆幸的是,建议的替代方法是调用Map(即不链接)修复了我的所有问题。

相关问题