将两列引用到一个关键EF Core



我有一个名为Contact的表,其中有一列名为ContactId

我想在我的新表Advertiser上创建一个外键,但有两个不同的列——PrimaryContactIdAlternateContactId

所以我有这个代码:

[ForeignKey(nameof(PrimaryContactId))]
public virtual Contact PrimaryContact { get; set; }
[ForeignKey(nameof(AlternateContactId))]
public virtual Contact AlternateContact { get; set; }
public int PrimaryContactId { get; set; }
public int AlternateContactId { get; set; }
...
builder.HasOne(adv => adv.PrimaryContactId);
builder.HasOne(adv => adv.AlternateContactId);

正如您所看到的,我并没有创建两列,它只是一列ContactId,因为它是键表的id名称。

如何让两列(PrimaryContactIdAlternateContactId(引用同一id(ContactId(?

更新:

我创建列为:

[ForeignKey(nameof(PrimaryContactId))]
public virtual Contact PrimaryContact { get; set; }
[ForeignKey(nameof(AlternateContactId))]
public virtual Contact AlternateContact { get; set; }
public int PrimaryContactId { get; set; }
public int AlternateContactId { get; set; }
...
builder.HasOne(adv => adv.PrimaryContact).WithOne().OnDelete(DeleteBehavior.Restrict);
builder.HasOne(adv => adv.AlternateContact).WithOne().OnDelete(DeleteBehavior.Restrict);

但当我试图将数据插入数据库时,它会抛出一个错误:

INSERT INTO [dbo].[Advertisers] ([Name], [AddressId], [PrimaryContactId], [AlternateContactId], [CreatedById])
VALUES ('Samsung', 1, 1, 2, 1), ('Apple', 2, 1, 2, 1)

无法在具有的对象"dbo.Advertisers"中插入重复的键行唯一索引"IX_Advertisers_AlternateContactId"。重复的密钥值为(2(。

我会尝试以下操作:

public int PrimaryContactId { get; set; } 
public virtual Contact PrimaryContact { get; set; }
public int AlternateContactId { get; set; } 
public virtual Contact AlternateContact { get; set; }
...
builder.Entity<YourEntity>.HasOne(adv => adv.PrimaryContact).WithOne().ForeignKey("ContactId");
builder.Entity<YourEntity>.HasOne(adv => adv.AlternateContact).WithOne().ForeignKey("ContactId");

最新更新