首页 > 解决方案 > EF 生成错误的 fk

问题描述

我有两个poco

public class Person {
   [Key]
   public virtual int Id { get; set; }
   public virtual int? AtendeeId { get; set; }
   [ForeignKey("Id")]
   public virtual Atendee Atendeed { get; set; }
}

public class Atendee {
   [Key]
   public virtual int Id { get; set; }

   public virtual int PersonId { get; set; }
   public virtual Person Person { get; set; }
}

由于某种原因,这会使用 atendee 的 ID 列而不是 personId 创建从 atendee 到 person 的 FK。声明这一点的正确方法是什么?

这是生成的 FK:

ALTER TABLE [dbo].[Atendees]  WITH CHECK ADD  CONSTRAINT [FK_dbo.Atendees_dbo.People_Id] FOREIGN KEY([Id])
REFERENCES [dbo].[People] ([Id])

标签: c#entity-frameworktsql

解决方案


您只列出集合的“相反”外键,即 1-N 关系。
你似乎有一个1-1的关系。

//[ForeignKey("Id")]
[ForeignKey("AtendeeId")]  // or just omit this
public virtual Atendee Atendeed { get; set; }

public class Person {
   [Key]
   public virtual int Id { get; set; }

   [ForeignKey("Atendeed")]  // refer to the property
   public virtual int? AtendeeId { get; set; }

   public virtual Atendee Atendeed { get; set; }
}

但是您应该考虑在覆盖 OnModelBuilding 中使用流利的表示法,这通常会给您更多的控制权。


推荐阅读