我有两个参与者,Prospect和person,我正在尝试做的是使用Prospect.ID作为ProspectTable的主键和PersonID的外键,我的ideia对两个实体都使用相同的ID而不需要我的PersonID展望实体 . 当潜在客户被保存在数据库中时,它会尝试保存PersonID,即使我没有在我的Prospect实体上拥有此属性,我想知道ef核心是否支持这种关系 .
这是我在模型构建器上得到的 .
modelBuilder.Entity<ProspectDto>(builder => { builder.ToTable("Prospects"); builder.HasKey(prospect => prospect.ID); });
modelBuilder.Entity<PersonDto>(builder => { builder.HasOne(p => p.Prospect).WithOne().HasForeignKey<ProspectDto>(pe => pe.ID); });
这是在数据库上执行的内容:
INSERT INTO [Prospects] ([ID], [PersonID]) VALUES (@p421, @p422)
,
PersonDTO:
public class PersonDto : DtoBase
{
public PersonDto()
{
}
public ProspectDto Prospect { get; set; }
}
ProspectDTO:
public class ProspectDto : DtoBase
{
public ProspectDto()
{
}
public PersonDto Person { get; set; } = new PersonDto();
}
DtoBase:
public abstract class DtoBase
{
public Guid ID { get; protected set; }
}
谢谢 .
2 回答
仅使用属性,不使用FluentAPI:
我不知道FluentAPI中
ForeignKey
的等价物 . 所有其他(Key和InverseProperty)都是可配置的,但为什么要使用两种方法而不是一种 .上面的代码生成以下迁移代码:
看起来非常接近您的需求 .
如果您将关系建模为one:one,则EF将自动使用Principal的PK作为依赖关系的FK .
请注意
ProspectDto
在DB上仍然有一个ID
列(继承自DtoBase),但FK关系将在ProspectDto.ID
和PersonDto.ID
之间,并且不应该有ProspectDto.PersonId
列 .