2011-04-02 156 views
3

我試圖構建一個使用實體框架的Web應用程序(ASP.NET MVC3),並且我再次遇到了一堵牆。用無參數構造函數記錄?

System.InvalidOperationException:當試圖在視圖碾過集合foreach循環,它拋出以下異常的 類的GvG.Entities.News'沒有 參數的構造函數。

現在是我的問題,是否有可能以某種方式定義我的記錄類型上的無參數構造函數?此刻

我的記錄類型的樣子:

type News = { 
    mutable ID:int; 
    mutable Author:string; 
    mutable Title:string; 
    mutable Content:string } 

我所知道的,我可以創建烘烤場等,而不是一類,但多數民衆贊成什麼,我試圖避免。

回答

3

我嘗試了一些承包項目我做了F#團隊在解決這個(espeically對於實體框架),你可以找到在F# PowerPack sources實驗方案。它沒有完全測試&你必須自己建立它。實驗解決方案將查詢中的所有F#元組和F#記錄替換爲其他(可變)類型,然後將結果轉換回記錄/元組。

編輯在你的問題中沒有看到關於定義類的提及,但我將在此爲其他可能來到這裏的人提供相同的問題。

有沒有簡單的解決方法。不幸的解決方案是定義明確地與屬性的類:

type News() = 
    let mutable id = 0 
    let mutable author = "" 
    let mutable title = "" 
    let mutable content = "" 
    member x.ID with get() = id and set(v) = id <- v 
    member x.Author with get() = author and set(v) = author <- v 
    member x.Title with get() = title and set(v) = title <- v 
    member x.Content with get() = content and set(v) = content <- v 

相比,記錄這是非常醜陋的,但它是做在F#的當前版本的唯一途徑。這是F#團隊意識到的,所以在下一個版本中可能會有一些更好的解決方案。

+2

下一個版本帶來了'[ ]',所以你是對的:) – Bartosz 2012-09-05 13:13:59

+0

@Bartosz真的很酷:-)老實說,我不知道這將在2011年4月加回! – 2012-09-06 01:19:08

3

MSDN說:「在記錄類型中,你不能定義構造函數。」

http://msdn.microsoft.com/en-us/library/dd233184.aspx

+0

我可以發誓,我讀了這篇文章3次沒有注意到:(你應該永遠不會知道這個問題的解決方法,因爲我不能使用構造函數?) – ebb 2011-04-02 12:21:39