Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance DbSet Add方法不支持继承?_Inheritance_Entity Framework 4.3_Dbcontext - Fatal编程技术网

Inheritance DbSet Add方法不支持继承?

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

我有以下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?
    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来执行自定义转换,但我不确定。