我有三个实体:
public class MainEntity()
{
public long Id { get; set; }
public long EntityAId { get; set; }
public EntityA OptionalEntityA { get; set; }
public long EntityBId { get; set; }
public EntityB OptionalEntityB { get; set; }
public string SProp { get; set; }
}
public class EntityA()
{
public long Id { get; set; }
public long MainEntityId { get; set; }
public MainEntity RequiredEntity { get; set; }
}
public class EntityB()
{
public long Id { get; set; }
public long MainEntityId { get; set; }
public MainEntity RequiredEntity { get; set; }
}
所有三个实体都有自己的由数据库生成的 ID:
Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
如何定义 MainEntity 与 EntityA 和 EntityB 之间的关系,以便拥有:
- MainEntity 可能有零个或一个 EntityA
- MainEntity 可能有零个或一个 EntityB
- EntityA 必须有一个 MainEntity
- EntityB 必须有一个 MainEntity
在我的 MainEntityConfigurationMap 中,我定义了这样的关系:
HasOptional(m => m.OptionalEntityA).WithRequired(ea => ea.RequiredEntity);
HasOptional(m => m.OptionalEntityB).WithRequired(eb => eb.RequiredEntity);
查看生成的迁移,我为 EntityA 提供了这个:
CreateTable(
"dbo.EntityA",
c => new
{
Id = c.Long(nullable: false, identity: true),
MainEntityId = c.Long(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.MainEntity", t => t.Id)
.Index(t => t.Id);
实体框架在这里定义了一个共享主键,有没有办法避免这种情况并使 MainEntityId 指向 MainEntity.Id?