使用 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 中发生的事情?