EF产生错误的fk

时间:2018-06-07 07:05:39

标签: c# entity-framework tsql

我有两个poco&#39>

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从参加者创建FK。宣布这个的正确方法是什么?

这是FK生成的:

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

1 个答案:

答案 0 :(得分:3)

您只列出了对面的'集合的外键,即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中使用流畅的符号,这通常会给你更多的控制。