为什么DbContext实例化存储库

本文关键字:存储 实例化 DbContext 为什么 | 更新日期: 2023-09-27 17:53:07

在下面的代码中,DbContext在派生类中实例化存储库。我相信它是通过构造函数中的反射来实现这一点的。这些是我的问题:

  1. 它为什么这么做?为了什么目的?
  2. 在自我或派生类中实例化属性是最佳实践吗?
  3. 如果它是一个最佳实践,它与哪个设计模式相关,这种行为的名称是什么?

这是我的项目中唯一的代码,我只是将entityframework引用添加到控制台应用程序项目:

class Program
{
    static void Main(string[] args)
    {
        var context = new DataContext();
        if(context.Products != null)
            Console.WriteLine("why repositories are not null?!");
    }
}
public class Product
{
}
public class DataContext : DbContext
{
    public IDbSet<Product> Products { get; set; }
} 

为什么DbContext实例化存储库

DbContext是实体框架程序集的内部类,因此您不能在代码中修改它。因此,通过在派生类中创建DbSet属性,实体框架将类型T的属性映射到数据库表列。