EF4Codeonlymapsinheritance我有以下模型,我希望ShiftRequest和MissionRequest在数据库中有一个表。公共类RequestBase{publicintId{get;放;公共日期时间?请求日期{得到;放;}publicintUserId{得到;放;}publicvirtualICollectionNotifications{get;虚拟列Column{get;放;}}publicclassMissionRequest:RequestBase{publicvirtualMissionMission{get;放;我试图在重写voidOnModelCreating(ModelBuildermodelBuilder)方法中创建它,但只创建了一个RequestBases表:modelBuilder.Entity().MapSingleType().ToTable("dbo.ShiftRequests");modelBuilder.Entity().MapSingleType().ToTable("dbo.MissionRequest");我究竟做错了什么?编辑Column和Mission也是我模型中的实体,可以接受吗?查看本文中有关TPH的部分。如果Mission和Column是复杂类型,您还可以找到如何将它们映射到那里。通常您必须使用MapHiearchy和Case方法而不是MapSingleType。编辑:这是一个例子:usingSystem;使用System.Collections.Generic;使用System.Data.Entity;使用System.Data.Entity.ModelConfiguration;命名空间EFTest{publicclassRequestBase{publicintId{get;放;公共日期时间?请求日期{得到;放;}publicintUserId{得到;放;}}publicclassMission{publicintId{get;放;}公共字符串名称{得到;放;}公共虚拟ICollectionMissionRequests{get;放;}}publicclassColumn{publicstringName{get;放;}}publicclassMissionRequest:RequestBase{publicvirtualMissionMission{get;放;}}publicclassShiftRequest:RequestBase{publicColumnColumn{get;放;}}publicclassTestContext:DbContext{publicDbSetRequests{get;放;}publicDbSetMissions{get;放;}protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder){modelBuilder.ContainerName="EFTest";modelBuilder.IncludeMetadataInDatabase=false;//复杂类型映射的例子.首先你必须定义//复杂类型。比您可以在//MapHiearchy中访问类型属性。varcolumnType=modelBuilder.ComplexType();columnType.Property(c=>c.Name).HasMaxLength(50);modelBuilder.Entity().Property(m=>m.Id).IsIdentity();modelBuilder.Entity().HasKey(m=>m.Id).MapSingleType(m=>new{m.Id,m.Name}).ToTable("dbo.Missions");modelBuilder.Entity().Property(r=>r.Id).IsIdentity();//您将多个实体映射到单个表。你必须//添加一些鉴别器来区分表中的实体类型。modelBuilder.Entity().HasKey(r=>r.Id).MapHierarchy().Case(r=>new{r.Id,r.RequestedDate,r.UserId,Discriminator=0}).Case(m=>new{MissionId=m.Mission.Id,Discriminator=1}).Case(s=>new{ColumnName=s.Column.Name,Discriminator=2}).ToTable("dbo.Requests");}}}编辑2:我更新了例子现在Mission是实体而不是复合型。以上为C#学习教程:EF4Code仅体现继承共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
