0

使用 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();
                    });
        }

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

有没有人看到过类似的情况或知道如何跟踪/调试 EF 中发生的事情?

4

1 回答 1

0

在这里找到答案... Entity Framework 4.3 - TPH 映射和迁移错误

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

...简而言之,您曾经能够在 4.1 中对单个 EntityConfiguration 进行链式映射调用。和 4.2

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

于 2012-06-05T17:47:41.040 回答