2012-12-19 29 views
6

我想爲linqpad創建驅動程序,有問題:爲linqpad創建DynamicDataContextDriver用C#

當我創建DynamicDataContextDriver,我必須創建TypedDataContext類。

  1. 我應該把什麼呢?
  2. 它將如何填充?
  3. 我可以控制它將如何填充?
  4. 如果我在這裏使用對象數據庫,有什麼我必須牢記的嗎?

我找到了一些答案here,但我找不到所有上述答案。

回答

3

類型化的數據的上下文是簡單地用合適的用於查詢的屬性/字段的類。這些屬性/字段通常會返回IEnumerables或IQueryables。例如:

public class TypedDataContext 
{ 
    public IEnumerable<Customer> Customers { get { ... } } 
    public IEnumerable<Order> Orders { get { ... } } 
    ... 
} 

當您使用Visual Studio創建一種新的項目「LINQ to SQL類」或「ADO.NET實體數據模型」時,Visual Studio爲您創建一個類型化的數據上下文這是一個LINQPad期望的例子。類型化的數據上下文還可以公開方法(例如映射存儲過程或函數) - 實際上它可以暴露對最終用戶有意義的任何事情。

當您執行在LINQPad查詢,有一個連接,LINQPad子類與連接,以便查詢訪問其所有字段/屬性相關聯的類型的數據上下文。這就是爲什麼Customers.Dump()是一個有效的查詢 - 我們只需訪問Customers而不必首先實例化類型化的數據上下文。

LINQPad驅動程序可以以兩種方式之一工作。或者它可以像Visual Studio和自動和動態(動態數據上下文驅動器)構建類型化的數據的上下文,也可以從現有的組件由用戶(靜態數據上下文驅動器提供提取類型化的數據的上下文)。當您添加在LINQPad的連接,你會發現,司機在兩個列表框中列出(構建數據上下文自動 = 動態驅動從自己的組裝 = 靜態驅動程序使用類型化的數據上下文)。

無論何時執行查詢,都會實例化類型化的數據上下文。因爲它的屬性通常會返回延遲評估的IEnumerables/IQueryables,所以考慮「填充」它是沒有幫助的。但是,它需要知道如何訪問基礎數據源,並且這是通過passing arguments into the constructor完成的。

LINQPad保持正常運行查詢的查詢的應用領域還活着,這可能與高速緩存和優化你應該寫一驅動程序對象數據庫有用。除此之外,對象數據庫不應該有任何特殊的考慮。