Vit*_*tor 3 c# f# entity-framework
我正在尝试将示例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
Run Code Online (Sandbox Code Playgroud)
这是不完整的,Visual Studio Code抱怨DbSet没有可访问的对象构造函数。除此之外,我不知道如何重写该方法OnConfiguring。
由于DbSet<T>没有公共构造函数,因此您无法自己创建它的实例。这个想法是,您只需声明属性作为null初始值,EF 稍后会为它们分配新值。因此,您只需指定 的初始值null即可:
member val Blogs: DbSet<Blog> = null with get,set
Run Code Online (Sandbox Code Playgroud)
要重写方法,请使用override关键字:
override this.OnConfiguring optionsBuilder =
optionsBuilder.UseSqlServer @"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
Run Code Online (Sandbox Code Playgroud)
我使用了Fyodor的答案,但是后来当我尝试向集合中添加新Blog时,我收到了空引用异常。因此,我找到的答案是将Blogs和的声明修改Posts为:
[<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
Run Code Online (Sandbox Code Playgroud)
该override关键字解决方案工作对我很好!