我正在尝试在两个实体之间创建一个必需的:可选的关系,其中必需的实体将导航属性公开给可选的实体,而可选的实体包含外键,用作其主键。这是我的两个实体的样子:
class OptionalEntity
{
public string RequiredEntityID { get; set; }
}
class RequiredEntity
{
public string ID { get; set; }
public OptionalEntity Optional { get; set; }
}
我喜欢在 Fluent 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
}
首先,这是否可能?如果可能,使用 Fluent API 配置此关系的正确方法是什么?
最佳答案
我认为您正在尝试做的是使用在可选实体表上的必需实体上使用的相同 key ,以便它们共享相同的 key 。
如果是这样,我认为您的方向是正确的。您的实体类看起来不错。您可以像这样映射它们:
public OptionalEntityConfiguration()
{
HasKey(r => r.RequiredEntityID);
Property(r => r.RequiredEntityID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
public RequiredEntityConfiguration()
{
HasKey(r => r.ID);
HasOptional(r => r.Optional);
}
但是,这意味着每个 RequiredEntity
只能有 0 或 1 个 OptionalEntity
。
关于c# - EntityFramework 外键作为具有流畅 API 的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35159113/