Alf*_*and 3 c# entity-framework
我正在尝试在两个实体之间创建一个必需的:可选关系,其中所需的实体将导航属性暴露给可选实体,以及包含外键的可选实体,用作其主键.这是我的两个实体的样子:
class OptionalEntity
{
public string RequiredEntityID { get; set; }
}
class RequiredEntity
{
public string ID { get; set; }
public OptionalEntity Optional { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而且我会顺便想对它们进行配置以流利的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
}
Run Code Online (Sandbox Code Playgroud)
首先是这可能,如果是这样,使用流畅的API配置这种关系的正确方法是什么?
我认为您要做的是使用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);
}
Run Code Online (Sandbox Code Playgroud)
然而,这意味着OptionalEntity每个只能有0或1 RequiredEntity.