我试图创造某种"某种"自定义" DbContext"对于使用MongoDb的非常具体的应用程序。我遇到了一个问题:
DbSet如何知道DbContext的存在?
我的意思是,当我写
时public DbSet<Assignment> Assignments { get; set; }
public DbSet<User> Users { get; set; }
在我的DbContext中,DbSet实例如何获取对DbContext类的引用?通过反思?
但是当我进入EntityFramework source code时,我遇到了另一个问题
public virtual DbSet<TEntity> Set<TEntity>() where TEntity : class => _setInitializer.Value.CreateSet<TEntity>(this);
在这个表达式中我无法理解lambda表达式在&#34;其中&#34;条款。有人可以启发我吗?
UPD
每次我在DbContext中调用我的DbSet属性
public class BlogPostContextContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
DbSet调用DbContext并对数据进行必要的操作。 我的问题是:DbSet如何获取对DbContext的引用。 我问的是DbSet和DbContext之间的底层通信。
提前致谢。
请原谅我的英文。
伊万塔拉耶夫
答案 0 :(得分:3)
我无法理解lambda表达式在&#34;其中&#34;子句。
方法声明包含两部分。第一个是泛型类型约束:
where TEntity : class
这意味着TEntity
所使用的任何类型都必须是reference type。
第二部分是Expression-bodied function:
=> _setInitializer.Value.CreateSet<TEntity>(this);
哪个是C#6.0功能。如果您的方法是单行,则可以将声明为 Lambda Expression。它只是意味着每次调用Set
时,它都会调用一行&#34; body&#34;方法。编译器会把它变成一个命名的方法&#34;在幕后&#34;。
DbSet如何知道DbContext的存在?
它不直接知道它。 DbContext
表示您的数据库,DbSet
表示该数据库中的表。当您操纵DbSet
时,它会隐含地引用它的基础DbContext
并通过上下文添加它的实体。
答案 1 :(得分:0)