asp.net-core - 实体框架核心 - 一对多但父级也具有单个子级的导航属性?
问题描述
我目前在实体“对话”和“消息”之间有一个有效的一对多关系,其中一个对话可以有多个消息。
这工作正常:
public class Conversation
{
public long ID { get; set; }
}
public class Message : IEntity
{
public virtual Conversation Conversation { get; set; }
public long ConversationID { get; set; }
public long ID { get; set; }
}
但是,我正在尝试将导航属性添加到名为“LastMessage”的“对话”类中,它将跟踪创建的最后一条消息记录:
public class Conversation
{
public long ID { get; set; }
public virtual Message LastMessage { get; set; }
public long LastMessageID { get; set; }
}
当我尝试应用上述内容时,出现错误
System.InvalidOperationException:无法确定“Conversation.LastMessage”和“Message.Conversation”之间的一对一关系的子/依赖方。
如何在“对话”和“消息”之间保持一对多的关系,但还要在“对话”类中添加导航属性以导航到单个“消息”记录?
解决方案
如果对话可以有多个消息,则称为一对多关系。您必须修复表格:
public class Conversation
{
[Key]
public long ID { get; set; }
[InverseProperty(nameof(Message.Conversation))]
public virtual ICollection<Message> Messages { get; set; }
}
public class Message
{
[Key]
public long ID { get; set; }
public long ConversationID { get; set; }
[ForeignKey(nameof(ConversionId))]
[InverseProperty("Messages")]
public virtual Conversation Conversation { get; set; }
}
推荐阅读
- excel - 在 Excel 中的隐藏工作表上运行宏时出错
- r - 使用 left_join() 合并数据集
- html - 前端 - HTML 文件
- javascript - onEachFeature 函数内的传单嵌套 IF 条件
- javascript - 用猫鼬删除嵌套对象
- windows - 我可以使用 Firebase 创建 Windows 应用吗?
- c - C程序,strlen不计算空格?
- ansible - Ansible:从 AWS 的路由表中删除一条路由
- android-studio - 如何将滚动/滑动手势应用于 VideoView
- terraform - Terraform 导入资源并循环这些资源