Inheritance DbSet Add方法不支持继承?
我有以下POCO课程:Inheritance DbSet Add方法不支持继承?,inheritance,entity-framework-4.3,dbcontext,Inheritance,Entity Framework 4.3,Dbcontext,我有以下POCO课程: Public Class CompetitionSubscription Public Property ID As Long Public Overridable Property CompetitionID As Long Public Overridable Property CompetitionPlayerID As Long Public Property CompetitionStrength As Short? Pu
Public Class CompetitionSubscription
Public Property ID As Long
Public Overridable Property CompetitionID As Long
Public Overridable Property CompetitionPlayerID As Long
Public Property CompetitionStrength As Short?
Public Property StrengthWithinSection As Short?
End Class
<NotMapped()>
Public Class FullCompetitionSubscription
Inherits CompetitionSubscription
Public Property Competition As Competition
Public Property CompetitionPlayer As CompetitionPlayer
End Class
我编写了如下的单元测试:
Public Class CompetitionSubscriptionsDB
Inherits DbContext
Public Property CompetitionSubscriptions As DbSet(Of CompetitionSubscription)
End Class
<TestMethod()>
Public Sub AddSubscriptionToDatabase()
Using db = New CompetitionSubscriptionsDB
Dim subscription = New FullCompetitionSubscription With
{.CompetitionID = 1,
.CompetitionPlayerID = 1,
.CompetitionStrength = 2,
.StrengthWithinSection = 12}
db.CompetitionSubscriptions.Add(DirectCast(subscription, CompetitionSubscription))
db.SaveChanges()
End Using
End Sub
此操作失败,以下错误从荷兰语翻译而来,因此可能不是确切的消息:
未找到EntityType CompetitionSubscriptionLib.FullCompetitionSubscription的元数据
由于FullCompetitionSubscription类带有该属性,因此我可以理解错误消息,但DirectCast的要点是,如果我将订阅类型更改为CompetitionSubscription,并且测试通过,则将FullCompetitionSubscription作为基本CompetitionSubscription出售给DbContext
哪里出错?这是一个运行时错误?@EkoostikMartin它是运行测试时抛出的异常消息的一部分。为什么不在CompetitionSubscription类型的前一行赋值语句上尝试DirectCast,然后可以对结果进行一些反思。我认为DirectCast不会更改运行时类型,但是EF检查运行时类型以查找元数据,并且不能传入未映射的运行时类型的对象。您需要创建CompetitionSubscription对象,而不是FullCompetitionSubscription对象,或者必须提供一个转换运算符,该运算符可以真正创建基本类型的新对象并复制属性值。我相信您必须使用CType来执行自定义转换,但我不确定。