c# - EntityFramework 外键作为具有流畅 API 的主键

标签 c# entity-framework

我正在尝试在两个实体之间创建一个必需的:可选的关系,其中必需的实体将导航属性公开给可选的实体,而可选的实体包含外键,用作其主键。这是我的两个实体的样子:

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/

相关文章:

c# - 测量许多方法的执行时间

c# - 将扁平化的分层数据转换为树结构的 JSON

c# - SignInManager 构造函数不在 ASP.NET Core Web 项目中时发生更改

c# - 使用 Azure 函数 c# 将 json 存储在 blob 存储上

javascript - 如何在 ASP.Net 中使用 javascript 函数设置查询字符串值?

c# - Entity Framework 迁移,我无权访问生产 sql server

c# 网络适配器列表

entity-framework - 如何建模三元关系

c# - 向实体 LINQ 查询添加条件(字符串)

c# - LINQ 选择具有不同 ForeignKeyId 列的最新记录