将实体框架核心示例转换为F#

时间:2017-04-10 16:26:55

标签: c# entity-framework f#

我试图将示例Entity Framework Core翻译为F#,但我无法翻译BloggingContext类。

直到现在我写了

type BloggingContext() =
inherit DbContext()

member val Blogs = DbSet<Blog>() with get,set
member val Posts = DbSet<Post>() with get,set

这是不完整的,Visual Studio代码抱怨DbSet没有可访问的对象构造函数。除此之外,我不知道如何覆盖方法OnConfiguring

2 个答案:

答案 0 :(得分:4)

我使用了Fyodor的答案,但后来当我尝试在集合中添加新的Blog时,我收到了一个空的引用异常。所以,我找到的答案是将BlogsPosts的声明修改为:

[<DefaultValue>] val mutable m_blogs : DbSet<Blog>
    member public this.Blogs with get() = this.m_blogs 
                                        and set v = this.m_blogs <- v

[<DefaultValue>] val mutable m_posts : DbSet<Post>
    member public this.Posts with get() = this.m_posts 
                                        and set v = this.m_posts <- v

override关键字解决方案对我来说很好用!

答案 1 :(得分:2)

由于DbSet<T>没有公共构造函数,因此您无法自己创建它的实例。我们的想法是,您只需将null的属性声明为初始值,EF稍后会为其分配新值。因此,您只需指定null的初始值即可:

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

要覆盖方法,请使用override关键字:

override this.OnConfiguring optionsBuilder =
   optionsBuilder.UseSqlServer @"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"