ebb*_*ebb 4 f# entity-framework asp.net-mvc-3
我正在尝试构建一个使用Entity Framework的Web应用程序(ASP.NET MVC3),而且我再一次碰壁.当尝试在视图中的集合上运行foreach循环时,它会抛出以下异常:
System.InvalidOperationException:类'GvG.Entities.News'没有无参数构造函数.
现在是我的问题,是否有可能以某种方式在我的记录类型上定义无参数构造函数?
我目前的记录类型如下:
type News = {
mutable ID:int;
mutable Author:string;
mutable Title:string;
mutable Content:string }
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建一个带烘焙场等的课程,但这就是我想要避免的.
这是一个旧版本,但我今天偶然发现了类似的问题,看起来像F#3.0你可以用[<CLIMutable>]属性克服它:http://msdn.microsoft.com/en-us/library/hh289724.aspx
这样,当C#API需要POCO时,您可以在许多场景中使用F#immutable记录.
我在为 F# 团队做的一些承包项目中尝试解决这个问题(特别是实体框架),您可以在F# PowerPack 源代码中找到实验性解决方案。它尚未经过完全测试,您必须自己构建它。实验解决方案将查询中的所有 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
Run Code Online (Sandbox Code Playgroud)
与记录相比,这非常难看,但这是当前版本的 F# 中实现这一点的唯一方法。F# 团队已经意识到这一点,因此下一版本中可能会有更好的解决方案。