简单的测试项目来自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中发生的事情?
答案 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(即不链接)修复了我的所有问题。