如何使用 Fluent API 为 EF Core 中的 2 个实体创建一对一映射?

问题描述 投票:0回答:0

我想在 2 个实体之间创建一个一对一的映射,但是在添加属性(下方)和流畅的 API 代码后,我在构建迁移文件时收到此错误消息(下方)。

仅供参考 - 我已经构建了表并且我的主键(Id)在“BaseEntity”中

我希望能够做的是从 StripeTransfer 开始并访问 StripePayment 数据。像这样:

var somePropertyValue = _dbContext.StripeTransfers.StripePayment.someStripePaymentProperty

要求 - 我不知道首先创建哪个实体行,所以任何一行都应该能够在另一行之前添加。

错误:

从 'StripeTransfer.StripePayment' 到 'StripePayment.StripeTransfer' 与外键属性 {'SourceTransactionId' : string} 的关系不能以主键 {'Id' : int} 为目标,因为它不兼容。为此关系配置具有兼容类型的主键或一组外键属性。

这是我的代码:

public class StripePayment: BaseEntity
{
    // primary key "Id" in BaseEntity
    public string LatestChargeId { get; set; }
    public StripeTransfer StripeTransfer { get; set; }
}

public class StripeTransfer : BaseEntity
{
    // primary key "Id" in BaseEntity
    public string SourceTransactionId { get; set; }
    public StripePayment StripePayment { get; set; }
}

流畅的API:

modelBuilder.Entity<StripePayment>()
  .HasOne<StripeTransfer>(t => t.StripeTransfer)
  .WithOne(g => g.StripePayment)
  .HasForeignKey<StripeTransfer>(g => g.SourceTransactionId);
.net entity-framework-core one-to-one ef-fluent-api
© www.soinside.com 2019 - 2024. All rights reserved.