2

我在我的 EF5 edmx 文件中定义了两级继承结构。

类结构的一个简单示例:

A -> B
A -> C
A -> D -> E
A -> D -> F

粗体类是抽象的(必须继承)。

A 类定义了所有其他类使用的几个属性,每个类都添加了自己的一些数据。

该表有两个鉴别器列,一个用于第一级映射(A -> B、C 或 D),一个用于第二组(D -> E 或 F)。

edmx 没有错误,代码运行良好,我可以实例化任何(非抽象)类并查询数据库并正确返回每个类的所有数据。

但是,当我尝试在数据库中创建新记录时,在最低级别的类(E 和 F)中设置的属性不会保存到表中。

这是我运行的代码示例(VB,抱歉):

Dim _base as A
Select case condition
    Case E
        dim _concrete as E = _context.A.Create(of E)
        _concrete.UniqueProperty = "Value"
        _base = _concrete
End Select

_base.BaseLevelProperty = "AnotherValue"

_context.Versions.Add(_base)
If _context.GetValidationErrors.Count > 0 Then Throw New Exception("context errors")
_context.SaveChanges()

当然,对于不同的具体类,还有更多的案例。

这适用于 B 和 C,唯一和基本属性保存到数据库中。但是对于 E 或 F,尽管在调用之前在对象中设置了属性,但savechanges它们的值不会进入数据库,只有 NULL 出现在数据应该在的列中。

奇怪的是,如果我手动将数据输入这些列之一并在数据库中查询所有对象,TypeOf E那么我手动输入的数据就会被正确检索。

这表明我的映射是正确的,对吧?为什么数据会以一种方式而不是另一种方式去?

我知道这是可能的,因为在这个问题中讨论了一个更复杂的版本,但它没有提到与我的问题有关的任何事情。

4

0 回答 0