【问题标题】:Custom foreign key column of source table源表自定义外键列
【发布时间】:2020-08-04 10:07:24
【问题描述】:

我想配置 EFCore 以根据属性 AAlternateId 加载类 BA 属性,并且 AAlteranateId 应该是表 A 的列 AlternateId 的外键。我将如何使用 fluent api 进行配置?

class A {
  public Guid Id { get; set; }

  public Guid AlternateId { get; set; }
}

class B {
  public Guid Id { get; set; }

  public AAlternateId { get; set; }

  public A A { get; set; }
}

【问题讨论】:

标签: c# asp.net-core entity-framework-core


【解决方案1】:

首先,您似乎忘记设置AAlternateId的类型。

public Guid AAlternateId { get; set; }

然后,如果您希望将 ForeignKey AAlternateId 链接到 AlternateId (不是 PK),您应该使用 PrincipalKey 来定义引用键 AlternateId唯一限制

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<A>().ToTable("A");
    modelBuilder.Entity<B>().ToTable("B");
    modelBuilder.Entity<B>()
        .HasOne(b => b.A)
        .WithOne()
        .HasPrincipalKey<A>(a => a.AlternateId)
        .HasForeignKey<B>(b => b.AAlternateId);
}

结果:

CREATE TABLE [dbo].[B] (
[Id]           UNIQUEIDENTIFIER NOT NULL,
[AAlternateId] UNIQUEIDENTIFIER NOT NULL,
CONSTRAINT [PK_B] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_B_A_AAlternateId] FOREIGN KEY ([AAlternateId]) REFERENCES [dbo].[A] ([AlternateId]) ON DELETE CASCADE
);

【讨论】:

  • 嗨@Puchacz,这个解决方案可以帮助您解决问题吗,如果可以,您可以将其标记为答案,谢谢:)
猜你喜欢
  • 2017-05-14
  • 2020-05-02
  • 2012-06-24
  • 2011-10-12
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多