2011-04-02 164 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