我试图将示例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
。
答案 0 :(得分:4)
我使用了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
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;"