繁体   English   中英

类实例化后,F#代码不起作用

[英]F# code does not work after class instantiation

我正在尝试将Entity Framework Core示例转换为F#。 首先,我创建了如下类的F#版本BloggingContextBlogPost

namespace ConsoleApp.SQLite.FSharp

open Microsoft.EntityFrameworkCore
open System.Collections.Generic

type Post() =
    member val PostId = 0 with get,set
    member val Title = "" with get,set
    member val Content = "" with get,set
    member val BlogId = 0 with get,set
    member val Blog = Blog() with get,set

and Blog() =
    member val BlogId = 0 with get,set
    member val Url = "" with get,set
    member val Posts = [Post()] with get,set

type BloggingContext() =
    inherit DbContext()

    member val Blogs : DbSet<Blog> = null with get,set
    member val Posts : DbSet<Post> = null with get,set

    override this.OnConfiguring optionsBuilder =
        optionsBuilder.UseSqlite("Data Source=blogging.db") |> ignore

然后,我尝试创建Main类的f#版本,编写如下:

open System
open ConsoleApp.SQLite.FSharp

[<EntryPoint>]
let main argv =
    let db = new BloggingContext() in
    let blog = Blog() in
    printfn "%s" "Stopped working before here";
    blog.Url <- "http://blogs.msdn.com/adonet";
    db.Blogs.Add(blog) |> ignore;
    let count : int = db.SaveChanges() in
    printfn "%i records saved to database" count;
    printfn "All blogs in database:"
    for blog in db.Blogs do
        printfn "- %s" blog.Url
    0

正如代码中标记的那样,在此代码行let blog = Blog() in之后,它只是停止打印任何内容(以及停止工作let blog = Blog() in而且我不知道我在创建Blog实例时做错了什么。

我通过删除该行中的Post()来解决它

member val Posts = [Post()] with get,set

在那时

member val Posts = [] with get,set

问题是类声明中的冗余,我已经创建了一个只有一个成员的列表,这不是我想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM