2012-10-18 40 views
0

我有一個簡單的表,如下映射到實體框架。我試圖返回一個IEnumerable(Of MyTableObject)的非常基本的調用,但是MVC API只是用錯誤代碼500爆炸出來。當我嘗試返回一個IEnumerable(Of String)並選擇一個列時,它的確如此。MVC4 Web Api不返回實體框架IEnumerable()

Entity Framework Model

我嘗試用下面的代碼返回此模式。

' GET api/chatlog 
Public Function GetValues() As IEnumerable(Of ChatLog) 
    Using mcEntity As New McEntities 

     Return mcEntity.ChatLogs.ToList() 
    End Using 
End Function 

不幸的是我的回報數據。我什麼都沒得到?

MVC Web API是否不支持從EF傳遞對象到管道中,還是手動將它序列化爲XML?

小提琴手拋出 「HTTP/1.1 500內部服務器錯誤」

+0

你試過返回一個數組? –

+0

我剛剛注意到你正在調用ToList,但stil返回IEnumerable,請嘗試更改返回類型 –

+0

我在一些測試中使用了ToArray()和AsEnumerable()或許將它添加到上面會更好。它引發了一個不同的例外。 「ObjectContext實例已被處置,不能再用於需要連接的操作。」所以刪除了使用語句無濟於事。此外,更改返回類型ToList(Of ChatLog)會引發相同的問題。 - ( –

回答

0

夫婦的事情,

  1. 您可以啓用這樣做的錯誤信息異常的詳細信息,

    Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy 。總是;

    並共享異常消息和堆棧跟蹤?

  2. 關於使用聲明,通常建議將您的EFContext放置在控制器中而不是操作中。 ApiController是一個IDisposable。你應該重寫控制器的Dispose方法,並在那裏處理你的DBContext。 例,

    public CustomersContext _db = new CustomersContext(); 
    
    public IEnumerable<Customer> Get() 
    { 
        return _db.Customers; 
    } 
    
    protected override Dispose(bool disposing) 
    { 
        base.Dispose(disposing); 
    
        if(disposing) 
        { 
         _db.Dispose(); 
        } 
    }