我试图在两个实体之间创建一个必需的:可选关系,其中所需的实体将导航属性暴露给可选实体,以及包含外键的可选实体,用作其主键。这就是我的两个实体:
class OptionalEntity
{
public string RequiredEntityID { get; set; }
}
class RequiredEntity
{
public string ID { get; set; }
public OptionalEntity Optional { get; set; }
}
我希望喜欢在流畅的API中配置它们的方式如下:
// Inside OptionalEntityConfiguration class
public OptionalEntityConfiguration()
{
HasKey(r => r.RequiredEntityID);
}
// Inside RequiredEntityConfiguration class
public RequiredEntityConfiguration()
{
HasKey(r => r.ID);
HasOptional(r => r.Optional)
.WithRequired();
// How can I configure this relationship to use
// the RequiredEntityID property as the foreign key?
HasOptional(r => r.Optional)
.WithRequired(o => o.RequiredEntityID);
// This is invalid because it requires a navigation property, not an ID
HasOptional(r => r.Optional)
.WithRequired()
.HasForeignKey(o => o.RequiredEntityID);
// The HasForeignKey method isn't available here
}
首先这是可能的,如果是这样,使用流畅的API配置此关系的正确方法是什么?
答案 0 :(得分:5)
我认为您要做的是使用Optional Entity表上的Required Entity上使用的相同密钥,以便它们共享相同的密钥。
如果是这种情况,我认为你走在正确的轨道上。你的实体类看起来没问题。您可以像这样映射它们:
public OptionalEntityConfiguration()
{
HasKey(r => r.RequiredEntityID);
Property(r => r.RequiredEntityID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
public RequiredEntityConfiguration()
{
HasKey(r => r.ID);
HasOptional(r => r.Optional);
}
然而,这意味着每个OptionalEntity
只能有0或1 RequiredEntity
。
答案 1 :(得分:0)
试试这个:
modelBuilder.Entity<RequiredEntity>()
.HasOptional(o => o.Optional)
.WithMany()
.Map(m => m.MapKey("RequiredEntityID"));