entity-framework - 错误:声明的导航属性类型与结果不兼容
问题描述
这个错误对我来说毫无意义。我已经阅读了这里和其他地方的各种答案 - 我没有点击任何内容。
导航属性“Invoice.LineItems”的声明类型与指定导航的结果不兼容
我有两张桌子:Invoices
和LineItems
。在最简单的形式中,它们看起来像:
发票
ID
LineItems
InvoiceID
名称
数量
和实体:
Public Class Invoice
<Key>
Public Property InvoiceID As Int64
Public Overridable Property LineItems As List(Of LineItem) = New List(Of LineItem)
End Class
Public Class LineItem
<Key>
Public Property InvoiceID As Int64
Public Property Name As String
Public Property QTY As Int32 = 0
End Class
尝试使用关联的 LineItem 获取 Invoices 时,出现上述错误。
Using database As PosDatabase = New PosDatabase
Dim invoices As List(Of Invoice) = database.Invoices _
.Include("LineItems") _
.ToList()
End Using
这是 EF 6.2.0
解决问题的任何帮助将不胜感激。
解决方案
该异常是由于模型映射不当引起的。
的 FKInvoiceID
属性LineItem
被标记为 PK,从而有效地使关系 1 变为 0..1,即将LineItems
集合导航属性表示的关系的预期多重性从Many
更改为One
。
我想这只是一个映射错误,实际的 PKLineItem
应该是不同的——要么是自己的身份列,要么是LineItemID
复合 PK (InvoiceID, Name)
。
所以只需映射正确的PK(带有数据注释或流利的API),LineItem
问题就会得到解决。在我的测试中,我做到了
modelBuilder.Entity<LineItem>()
.HasKey(e => new { e.InvoiceID, e.Name });
推荐阅读
- scala - 在 Scala 中,交错大量迭代器的最简单方法是什么?
- echo - 在 Katalon Recorder 中使用 storeValue 和 echo
- c - 排序算法不通过
- pandas - Pandas:获取正好有一个 0 的行
- php - 无法将 PHP 变量传递给 Epayment 网站的隐藏输入
- docker - 在 Windows 上构建容器时,Docker 构建变量始终为空
- xerces - 为什么我得到 [topic-reader] [DOTJ013E][ERROR] 无法解析 DITA-OT 3.0.4 中的引用文件 'xxx'
- java - Java:递归函数中出现意外的运行时错误
- javascript - 根据选择添加必需的属性
- python - 将脚本升级到 Python 3 - \r\n 和文本二进制模式