我有一个名为Contact
的表,其中有一列名为ContactId
。
我想在我的新表Advertiser
上创建一个外键,但有两个不同的列——PrimaryContactId
和AlternateContactId
。
所以我有这个代码:
[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名称。
如何让两列(PrimaryContactId
和AlternateContactId
(引用同一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");