Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework Table per Hierarchy Inheritance

I am trying to implement table per hierarchy inheritance with some of my database tables, e.g Address. I want to derive 3 classes from Address, these are 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) |
                    | ..                     |
                    | ..                     |
                    | ..                     |
                    | ..                     | 
                    | ..                     |
                    +------------------------+

The problem is I keep getting errors...

When Address is concrete, and contains the OwnerCategory property:

Error 3032: Problem in mapping fragments starting at line 178:Condition member 'addresses.OwnerCategory' with a condition other than 'IsNull=False' is mapped. Either remove the condition on addresses.OwnerCategory or remove it from the mapping.

When Address is abstract and contains the OwnerCategory property:

Problem in mapping fragments starting at line 178:Condition member 'addresses.OwnerCategory' with a condition other than 'IsNull=False' is mapped. Either remove the condition on addresses.OwnerCategory or remove it from the mapping.

When Address is concrete, and does not contain the OwnerCategory property:

'DtcInvoicer.Database.Address' does not contain a definition for 'OwnerCategory' and no extension method 'OwnerCategory' accepting a first argument of type 'DtcInvoicer.Database.Address' could be found (are you missing a using directive or an assembly reference?)

and

Problem in mapping fragments starting at lines 177, 195:EntityTypes Model.Address, Model.EmployeeAddress are being mapped to the same rows in table addresses. Mapping conditions can be used to distinguish the rows that these types are mapped to.

(I already have the condition set (when OwnerCategory = 0)

When Address is abstract and does not contain the OwnerCategory property:

'DtcInvoicer.Database.Address' does not contain a definition for 'OwnerCategory' and no extension method 'OwnerCategory' accepting a first argument of type 'DtcInvoicer.Database.Address' could be found (are you missing a using directive or an assembly reference?)

Any help is appreciated, thanks in advance.

like image 317
Saad Imran. Avatar asked Sep 01 '11 15:09

Saad Imran.


1 Answers

Since you are using OwnerCategory in the condition for your inheritance it can't be mapped to a property. It also looks like you should also have Address set to abstract. Make sure you delete the property from your model and amend any code that was using it. The non mapping errors you mention appear to be the standard error when the compiler can't find a specific member so be sure to fix those spots.

like image 134
scmccart Avatar answered Oct 25 '22 18:10

scmccart