【发布时间】:2021-02-14 15:57:36
【问题描述】:
我需要您的帮助来理解表之间的关系。我很难理解使用带有外键属性的导航属性来定义关系的用法/需求。 鉴于以下 2 个类,
public class Person
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
public string Name{ get; set; }
}
public class Package
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
public Guid AccountId { get; set; }
public virtual Person Account { get; set; }
public Guid ShipperId { get; set; }
public virtual Client Shipper { get; set; }
[Required]
public Guid ReceiverId { get; set; }
public virtual Client Receiver { get; set; }
}
如果我尝试更新数据库,则会收到错误消息
在表 'Packages' 上引入 FOREIGN KEY 约束 'FK_' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
另一方面,如果我删除属性public Guid ....Id { get; set; },则使用外键创建数据库,但[Required] 注释无效。
包含Guid 属性和不包含有什么区别?
【问题讨论】:
-
您是否尝试将
[ForeignKey("AccountId")]放在Account属性上?这里是the tutorial -
另外,你能分享一下你的 Fluent Api 配置吗?
-
有两个
Id属性。你删除了哪一个?我猜它是Person中的那个。请阅读(外键)relationships 和 owned types 的区别。 -
完成此操作后,请注意关于 SQL Server 对外键的限制有很多问题。
标签: c# .net-core entity-framework-core foreign-keys