为什么DbContext实例化存储库?

时间:2015-06-04 06:54:20

标签: c# entity-framework design-patterns repository-pattern

在以下代码中,DbContext在派生类中实例化存储库。我相信它通过构造函数中的反射以某种方式做到了这一点。 这些是我的问题:

  1. 为什么以及出于什么目的呢?
  2. 在自我类或派生类中实例化属性是最佳做法吗?
  3. 如果最佳做法是哪种设计模式与此行为的名称相关,该行为的名称是什么?
  4. 这是我项目中唯一的代码,我只是将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; }
    } 
    

1 个答案:

答案 0 :(得分:0)

DbContext是Entity Framework程序集内部的类,因此您无法在代码中对其进行修改。因此,通过在派生类中创建DbSet属性,Entity Framework将类型T的属性映射到数据库表列。大多数内部实体框架魔法发生在DbSet类中。