我知道微软有一份详细的文档提到了大量用于一对一关系的实体框架实体设计场景,但不幸的是我在那里找不到适合我的案例的解决方案。
假设我有下面列出的两个课程:
// Principal (parent)
class Blog
{
public int Id {get; set;}
}
和
// Dependent (child)
public class BlogHeader
{
public int Id {get; set;}
public Blog Blog {get; set;} // reference navigation to principal
}
如何使用 EF Fluent API 显式定义它们之间的一对一必需关系。我正在尝试使用以下代码:
internal class BlogHeaderConfiguration : IEntityTypeConfiguration<BlogHeader>
{
public void Configure(EntityTypeBuilder<BlogHeader> builder)
{
builder.ToTable("BlogHeaders");
builder.HasKey(x => x.Id);
builder.HasOne(x => x.Blog).WithOne().HasForeignKey<BlogHeader>(x => x.Blog);
}
}
但是我在添加新迁移时看到以下异常:
“Blog”不能用作实体类型“BlogHeader”的属性,因为它被配置为导航。
我用下面的代码实现了我想要做的事情:
builder.HasOne(x => x.Blog).WithOne().HasForeignKey<BlogHeader>("BlogId").IsRequired();
但是有一个警告,即显式外键名称作为硬编码字符串。如果有人知道一种无需指定显式外键名称的方法,请告诉我。