代码之家  ›  专栏  ›  技术社区  ›  Mark Canlas

强类型数据上下文如何工作?

  •  4
  • Mark Canlas  · 技术社区  · 15 年前

    这是对 my question from earlier this morning 但我还是很困惑。我正在为我的应用程序使用一个强类型的DataContext,尽管它发出警告,但它仍然可以神奇地工作。它是怎么做到的?

    下面是一个通常用于使用LINQ to SQL连接到数据库的代码。

    class MyDatabase : DataContext {
      public Table<Widget> Widgets;
      public Table<Car> Cars;
    
      public MyDatabase (string connection) : base(connection) { } 
    }
    

    即使它发出了警告,它也可以开箱即用。可以使用以下方法开始阅读:

    using (var db = new MyDatabase(connectionString)) {
      foreach (var w in db.Widgets)
        Console.WriteLine(w);
    }
    

    Widgets 似乎是一个领域 MyDatabase 班级。在我的代码中,我没有将它分配给任何东西。但在其他地方,我正在读它,它有价值。为什么?

    在Linq to SQL的其他示例中,包括由Visual Studio 2008的DBML布局工具生成的代码,数据上下文类可能如下所示:

    public partial class MyDatabase : DataContext {
      public Table<Widget> Widgets {
        get {
          return GetTable<Widget>();
        }
      }
    }
    

    注意包含 partial GetTable . 是 部分的 必要吗?

    我假设我的第一个例子是通过调用 获得表 但这段代码是从哪里来的呢?如何用数据填充数据上下文类的字段?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Marc Gravell    15 年前

    如果它们不是属性,唯一合乎逻辑的结论是基构造函数已经分配了它们。可能出乎意料,但并非不可能。

    这个 partial 允许您将多个代码文件组合成一个类;只有在 分隔代码文件(通常用于设计器)。

    一些对反射镜的挖掘表明 private void InitTables(object schema) 哪一个 确切地 这(在字段上反射,通过 GetTable(Type) )