c# - 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])
解决方案
您只列出集合的“相反”外键,即 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 中使用流利的表示法,这通常会给您更多的控制权。
推荐阅读
- python - 更改类变量python
- svgpanzoom - 使用 SvgPanZoom 从缩放中排除元素
- python - Scipy KSTest TypeError:_parse_args() 需要 3 到 5 个位置参数,但给出了 6 个
- python - 使用 python 搜索 CSV 文件
- android - 如何在 android 中使用 Text Watcher 进行多个编辑文本?
- c - 为什么 int (*ptr)[10] 类型的指针需要数组的地址而不仅仅是数组本身
- javascript - 在javascript代码中获取未定义的错误
- arrays - 删除每个文档的数组中特定于 mongo 的嵌套文档
- java - 使用java将数据从数据库设置到Extjs网格
- java - Slf4j - 启用调试,信息消息