entityframework4.3-TPH映射和迁移错误我用的是EntityFramework4.3,首先是代码迁移和手动迁移。我正在尝试映射一个使用两个自定义鉴别器字段的TPH(每个层次结构的表)设置。一个用于鉴别器本身,另一个用于软删除(很像NH类映射中的“where”选项)。在EF4.2上运行的另一个项目中,完全相同的设置工作正常。尝试在NuGet控制台中使用“add-migration”命令添加迁移时出现错误。我已经尝试了定义表名的所有组合-类的属性、“OnModelCreating”方法、EntityTypeConfiguration类等。我之前不涉及复杂层次结构映射的迁移工作正常。我偶然发现了EF4.3中的一些重大变化吗?字符串ParentString{得到;放;}}publicclassFoo:ParentClass{publicstringFooString{get;放;}}publicclassBar:ParentClass{publicstringBarString{get;放;}}//----映射配置--------------publicclassParentConfiguration:EntityTypeConfiguration{publicParentConfiguration(){Map(m=>{m.Requires("IsActive").HasValue(1);m.Requires("Type").HasValue("Foo");}).ToTable("Parent");Map(m=>{m.Requires("IsActive").HasValue(1);m.Requires("Type").HasValue("Bar");}).ToTable("Parent");}}//----上下文--------------------------protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){modelBuilder.Configurations.添加(新的父配置());}错误:System.InvalidOperationException:类型'Foo'已经映射到表'Parent'。指定所有映射方面单个Map调用中的表。在System.Data.Entity.ModelConfiguration.Configuration.Types.EntityTypeConfiguration.AddMappingConfiguration(EntityMappingConfigurationmappingConfiguration)在System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.ReassignSubtypeMappings()DbProviderInfoproviderInfo)在System.Data.Entity.DbModelBuilder.Build(DbConnectionproviderConnection)在System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContextcontext,XmlWriterwriter)在System.Data.Entity.Migrations.Extensions.DbContextExtensions.c__DisplayClass1.b__0(XmlWriterw)在System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(Action`1writeXml)在System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(DbContextcontext)在System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration配置,DbContext用户上下文)在System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration配置)在System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()在System.Data.Entity.Migrations.Design.ToolingFacade。GetPendingMigrationsRunner.RunCore()atSystem.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()Mihkel这是4.3和4.3.1的一个已知问题(我们发现在4.3.1后期进行修复已经太晚了.)幸运的是,有一种相当简单的方法可以更改代码使其正常工作。简而言之,您曾经能够在4.1中对单个EntityConfiguration链接映射调用。和4.2。像这样的模式:modelBuilder.Entity().Map(...).Map(...);这在4.3中不起作用,而是必须在该实体的EntityConfiguration上进行每个Map调用。所以像这样的模式:modelBuilder.Entity().Map(...);modelBuilder.Entity().Map(...);专门针对您的情况,这应该有效:modelBuilder.Entity().Map(m=>{m.Requires("IsActive").HasValue(1);m.Requires("Type").HasValue("Foo");});modelBuilder.Entity().Map(m=>{m.Requires("IsActive").HasValue(1);m.Requires("Type").HasValue("Bar");});}(我删除了一些通用参数,因为它们不需要,但这并不重要。)要使用显式EntityConfiguration执行此操作,您将使用以下内容:}}publicclassFooConfiguration:EntityTypeConfiguration{publicFooConfiguration(){Map(m=>{m.Requires("IsActive").HasValue(1);m.Requires("Type").HasValue("Foo");});}}publicclassBarConfiguration:EntityTypeConfiguration{publicBarConfiguration(){Map(m=>{m.Requires("IsActive").HasValue(1);m.Requires("Type").HasValue("Bar");});然后protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){modelBuilder.Configurations.Add(newParentConfiguration()).Add(newFooConfiguration()).Add(newBarConfiguration());我们打算在5.0中解决这个问题。以上就是《实体框架4.3-TPH映射与迁移错误分享》C#学习教程的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
