2012-10-19 51 views
0

我目前使用的是MVC 4 WebAPI w实体框架数据库第一次建模的场景。在我的apicontroller它给我一个错误:无法使用实体框架来转换(对象)类型为空的对象

发生错误。 无法投射 类型 'WhereSelectEnumerableIterator 2[VB$AnonymousType_4 2 [System.Nullable 1[System.Guid],System.Collections.Generic.IEnumerable 1 [CK5.Airline],VB $ AnonymousType_5 1[System.Nullable 1的System.Guid]]]' 为类型“System.Collections.Generic.IEnumerable 1[CK5.Airline]'. </ExceptionMessage> <ExceptionType>System.InvalidCastException</ExceptionType> <StackTrace> at lambda_method(Closure , Object , Object[]) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Object instance, Object[] methodParameters) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func的对象1个 FUNC键的CancellationToken的CancellationToken)

Public Class AirlineController 
      Inherits ApiController 

      ' GET api/Airline 
      Function GetAirlines() As IEnumerable(Of Airline) 
       Using db As New DefaultEntities 
        Return From p In db.Airlines.AsEnumerable Order By {p.Name} Group By ParentID = p.ParentID Into parentIDGroup = Group Select New With {.ParentID = ParentID} 
       End Using 
      End Function 
End Class 

在我的实体模型对象的PARENTID是一个可以为空(GUID)的类型,我相信导致了问题。在使用Linq2Sql scenerio之前,我已经有了这个工作,但随着更新,这给我一个问题。我不相信这是web api结构的问题,只是w实体框架。我哪里错了?

+0

我不是VB.NET专家,但从我看到你正在返回一个匿名类型的IEnumerable(我相信这是不允许的),但你的方法说你将返回IEnumerable(航空公司)因此VB试图将实际结果转换为您声明和失败的结果。 – Pawel

+0

我修好了。 1)由于某些原因,EF不喜欢使用语句Using db作为新的DBContext,它在使用之前会关闭连接,我认为。 2)我不知道为什么,但它也不喜欢使用lambda语句。所以它不喜欢Order By或Group By语句。我得看看这个。 3)问题有点不相关,但因为这是一个数据库的第一个EF,我也放在globabl.asax这个语句:Database.SetInitializer(新的DropCreateDatabaseIfModelChanges(的DefaultEntities)())。认为它会根据更改更新模型或数据库。它骗了我。 =/ – tetsuo

+1

我不认为这个陈述是准确的。您应该使用“使用”为了不泄漏连接。 OrderBy和GroupBy与lambda应该是完全正确的。如果您使用的是DatabaseFirst,则初始化程序将不起作用,因为数据库不会有额外的数据来判断数据库是否更改。既然你在删除数据库方面似乎没有问题 - 为什么你不删除数据库,然后通过你的应用创建它?这种方式初始值应该工作。 – Pawel

回答

1

我修好了。 1)由于某些原因,EF不喜欢使用语句Using db作为新的DBContext,它在使用之前会关闭连接,我认为。 2)我不知道为什么,但它也不喜欢使用lambda语句。所以它不喜欢Order By或Group By语句。我得看看这个。 3)问题有点不相关,但因为这是一个数据库的第一个EF,我也放在globabl.asax这个语句:Database.SetInitializer(新的DropCreateDatabaseIfModelChanges(的DefaultEntities)())。认为它会根据更改更新模型或数据库。它骗了我。 =/

相关问题