代码之家  ›  专栏  ›  技术社区  ›  Carthic user2144480

在EF中定义DBContext时调用基类构造函数的原因是什么?还有别的方法吗?

  •  0
  • Carthic user2144480  · 技术社区  · 7 年前

    class MyContext: DbContext
    {
    
         public MyContext(string connectionString) : base(connectionString)
         {
    
         }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Andrés Robinet    7 年前

    有几个构造函数重载 DbContext

    数据库上下文 实例,而不从中派生/继承。 或类似信息。 See the full overload list here

    但是当你从 实际上,您可以为您的 MyContext 上课,甚至不打电话给 base 如果你愿意的话。默认值 数据库上下文 基础

    public class MyDbContext : DbContext
    {
        public static Func<string> ConnectionStringProvider = () => "TheNameOfTheConnectionString";        
    
        public MyDbContext() : base(ConnectionStringProvider())
    
        //....
    }
    

    ConnectionStringProvider 委托在单元/集成测试中被替换,因为这是一个静态字段(我不鼓励这种做法,但我已经看到了)

    例如:

    MyDbContext.ConnectionStringProvider = () => "MyTestConnectionStringName";
    
    using (var ctx = new MyDbContext())
    {
        // This code will use conn string named MyTestConnectionStringName
    }
    

    但我想99%的情况下,正如Alexander所说,你只需要用连接字符串调用基构造函数,这样EF就能提前知道这些信息,你就不用再担心了