每个层次结构继承的实体框架表

问题描述 投票:0回答:2

我正在尝试使用我的一些数据库表实现每个层次结构的表继承,例如

Address
。我想从
Address
派生出3个类,它们是
EmployeeAddress
CustomerAddress
SupplierAddress

+-------------------+------------------------+
| Address           |> EmployeeAddress       |
+-------------------+------------------------+
| ID                | ..                     |
| OwnerID           | EmployeeID             |
| OwnerCategory     | (condition: where = 0) |
| Street_1          | ..                     |
| Street_2          | ..                     |
| City              | ..                     |
| Province          | ..                     | 
| PostalCode        | ..                     |
+-------------------+------------------------+
                    |> CustomerAddress       |
                    +------------------------+
                    | ..                     |
                    | EmployeeID             |
                    | (condition: where = 1) |
                    | ..                     |
                    | ..                     |
                    | ..                     |
                    | ..                     | 
                    | ..                     |
                    +------------------------+
                    |> SupplierAddress       |
                    +------------------------+
                    |  ..                    |
                    | EmployeeID             |
                    | (condition: where = 2) |
                    | ..                     |
                    | ..                     |
                    | ..                     |
                    | ..                     | 
                    | ..                     |
                    +------------------------+

问题是我不断收到错误......

Address
concrete,并且包含
OwnerCategory
属性时:

错误 3032:映射从行开始的片段时出现问题 178:条件成员“addresses.OwnerCategory”具有其他条件 比“IsNull=False”被映射。要么删除条件 地址.OwnerCategory 或将其从映射中删除。

Address
abstract 并且包含
OwnerCategory
属性时:

从第 178 行开始的映射片段出现问题:条件成员 “addresses.OwnerCategory”的条件不是“IsNull=False” 已映射。删除addresses.OwnerCategory 上的条件或 将其从映射中删除。

Address
具体,并且包含
OwnerCategory
属性时:

“DtcInvoicer.Database.Address”不包含以下定义 “OwnerCategory”并且没有扩展方法“OwnerCategory”接受 可以找到“DtcInvoicer.Database.Address”类型的第一个参数 (您是否缺少 using 指令或程序集引用?)

从第 177、195 行开始映射片段时出现问题:EntityTypes Model.Address、Model.EmployeeAddress 被映射到相同的行 在表地址中。可以使用映射条件来区分 这些类型映射到的行。

(我已经设置了条件(当OwnerCategory = 0时)

Address
抽象包含
OwnerCategory
属性时:

“DtcInvoicer.Database.Address”不包含以下定义 “OwnerCategory”并且没有扩展方法“OwnerCategory”接受 可以找到“DtcInvoicer.Database.Address”类型的第一个参数 (您是否缺少 using 指令或程序集引用?)

感谢任何帮助,提前致谢。

c# wpf entity-framework
2个回答
10
投票

由于您在继承条件中使用

OwnerCategory
,因此它无法映射到属性。看起来您还应该将
Address
设置为抽象。确保从模型中删除该属性并修改使用它的任何代码。当编译器找不到特定成员时,您提到的非映射错误似乎是标准错误,因此请务必修复这些点。


0
投票

对我来说,错误 3032 的解决方案是将

[NotMapped]
添加到我的鉴别器属性

© www.soinside.com 2019 - 2024. All rights reserved.