本教程將引導您通過建立一個簡單的應用支援人員LINQ to SQL技術。在不到5分鐘,您將有隨時可以使用的資料訪問層為您的業務對象
樣本介紹目錄如下:
介紹了LINQ to SQL技術
要求
編寫項目
從資料庫產生模型
查詢資料
插入新資料
更新資料
刪除資料
其他資訊
介紹了LINQ to SQL技術
LINQ主張語言綜合查詢,這意味著資料檢索已不再是一個獨立的語言。 LINQ引擎允許的。 NET應用程式串連到資料庫困擾許多關於列和行。您收到的資料是自動產生的對象準備使用你的商務邏輯。
LINQ to Relational Data 可能會被認為是一個對象關係映射(ORM)的工具。該型別安全LINQ查詢得到彙編成MSIL的執行,以及查詢的條款翻譯成SQL和送交的SQLite資料庫執行。這使得您的資料訪問層安全,更快捷,更方便大大設計。
要求 :
為了串連到你需要的SQLite資料庫伺服器本身的運行,為的SQLite dotConnect安裝和IDE運行。 LINQ到SQL需要的。 NET Framework 3.5和Visual Studio 2008 ,和的SQLite資料庫3或更高版本。請注意:LINQ to SQLite功能僅適用於專業版的SQLite的dotConnect的。
在本教程假定您已經擁有的資料庫物件建立。你必須執行一個指令碼從下列檔案如果您尚未這樣做:
編寫項目
建立一個新的控制台應用程式在Visual Studio 。它可以是任何其他項目類型的,但是為了簡單起見我們將使用控制台項目整個教程。其餘的教程假定該項目的名稱是ConsoleApplication1 。如果您的項目被命名否則,你將不得不替代這個名字與實際的方案總管。
1、從資料庫產生模型
添加Devart LINQ to SQL Model模型項目。為此,按右鍵引用節點在方案總管,指向添加,單擊建立項目....在添加新項目對話方塊中選擇資料,選擇Devart LINQ to SQL範本,並單擊添加。這將自動發射實體開發,修改和儲存該示範項目。
2、主菜單中的實體開發,選擇檔案|建立資料庫。這發射資料庫逆向工程嚮導。
3、單擊下一步在歡迎畫面上。由於這種情況的實體開發調用從Visual Studio的LINQ to SQL模式,選擇的架構中禁用此畫面。
4、填寫串連設定,然後單擊下一步。
5、選擇資料庫物件將用於模型。所有這些物件從crm_demo指令碼,包括輔助表。單擊下一步。
6、在下一螢幕上您可以調整命名規則的實體及其成員。為客戶示範資料庫沒有規則的要求,因此只需單擊下一步。
7、輸入CrmDemoData的名字空間,並CrmDemoDataContext的名稱DataContext之後。這將是名稱的主要資料訪問類。單擊下一步。
8、點擊下一步完成。並產生代碼模型是開放emd設計架構代碼。
9、在主菜單上,單擊檔案|儲存項目。這將更新DataContext1模型在Visual Studio 。
該模型您剛剛產生準備使用。您可以檢查它的實體開發視覺與圖和toolwindows ,編輯的各個方面的課程和關係,添加新的模型元素。請記住,您儲存該項目,使開發實體的變化反映在Visual Studio 。
該嚮導建立的所有選定的課程表,代表實體。它還建立了一個System.Data.Linq.DataContext,它控制的串連到資料庫,整個資料流。這個類包含的屬性和方法的命名資料庫物件。您將使用這些成員檢索和修改資料的範疇。這些程式碼封裝含在該檔案DataContext.cs ( DataContext.vb ) 。
查詢資料
所有LINQ to SQLite的操作,可以以執行通過DataContext,這是命名CrmDemoDataContext本指南中。擷取資料,你必須首先建立一個執行個體的情況下,然後編寫查詢LINQ to SQL ,然後訪問該對象返回的查詢,這可能是一個收集的對象或一個對象。
讓我們看所有的資料從表公司,排序它CompanyID ,輸出一些列。添加以下代碼塊的方法主要:
[C#] cs
CrmDemoDataContext context = new CrmDemoDataContext();var query = from it in context.Companies orderby it.CompanyID select it;foreach (Company comp in query) Console.WriteLine("{0} | {1} | {2}", comp.CompanyID, comp.CompanyName, comp.Country);Console.ReadLine();
[Visual Basic] vb
Dim context As CrmDemoDataContext = New CrmDemoDataContextDim query = From it In context.companies _ Order By it.CompanyID _ Select itDim comp As companyFor Each comp In query Console.WriteLine("{0} | {1} | {2}", comp.CompanyID, comp.CompanyName, comp.Country)NextConsole.ReadLine()
就這麼簡單。您的查詢語句,然後迭代通過它你會做一個平常收集的對象。該資料庫的互動是由LINQ to SQLite的背景。現在讓我們看看誰是誰在此程式碼範例。
通過CrmDemoDataContext的名字是內容可以知道所有關於您的模型架構,及其一切處理操作。所有LINQ to SQLite的操作,以履行在這一類的屬性和方法。建議您保留一個執行個體的整個您的申請,因為它消耗大量的資源,和實體不得通過不同的資料共用環境。
查詢,它是任意的變數名稱中的LINQ to SQL語句。前者是用於收集資料的對象,後者則是沒有使用以外的聲明。
context.Companies指的是公用財產, CrmDemoDataContext上下文。這個屬性代表了收集的所有資料的範疇。
公司(在foreach聲明)的名字是一個產品和一流的。這個類映射到表中的公司的資料庫和它的名字來自於它。
以下是該項目的產量在控制台:
請注意:LINQ to SQL查詢代碼只是描述了查詢。它不執行。這種做法被稱為延遲執行。
現在讓我們來查詢資料從兩個表美國與外國的關鍵。取代舊的代碼如下:
[C#]
CrmDemoDataContext context = new CrmDemoDataContext();var query = from it in context.Companies orderby it.CompanyID select it;foreach (Company comp in query) { if (comp.PersonContacts.Count > 0) { Console.WriteLine("{0} | {1} | {2}", comp.CompanyName, comp.PersonContacts[0].FirstName, comp.PersonContacts[0].LastName); }}Console.ReadLine();
[Visual Basic]
Dim context As CrmDemoDataContext = New CrmDemoDataContextDim query = From it In context.companies _ Order By it.CompanyID _ Select itDim comp As companyFor Each comp In query If comp.personcontacts.Count > 0 Then Console.WriteLine("{0} | {1} | {2}", _ comp.CompanyName, comp.personcontacts(0).FirstName, _ comp.personcontacts(0).LastName) End IfNextConsole.ReadLine()
正如你所看到的, LINQ to SQL查詢聲明沒有改變。這些資料的聯絡人是取自資料庫時會自動進入相應的財產,該控制的對象。這是一個偉大的事情LINQ到SQL :您不必擔心相依寫作時查詢。
插入新資料
什麼是增加早些時候行表,現在僅僅是增加了新的物件範圍內集合。當您準備好發送到資料庫的變化,呼籲SubmitChanges ( )方法的範圍內。在此之前,你首先必須將所有屬性,不支援空(沒有)的價值。該SubmitChanges ( )方法產生和執行命令,執行相當於INSERT , UPDATE或DELETE語句對資料來源。
讓我們添加一個新產品和新的一類資料庫。取代舊的代碼如下:
[C#]
CrmDemoDataContext context = new CrmDemoDataContext();// Create a new categoryProductCategory newCategory = new ProductCategory();newCategory.CategoryID = 1000;newCategory.CategoryName = "New category";// Create a new productProduct newProduct = new Product();newProduct.ProductID = 2000;newProduct.ProductName = "New product";newProduct.Price = 20;// Associate the new product with the new categorynewProduct.ProductCategory = newCategory;context.Products.InsertOnSubmit(newProduct);// Send the changes to the database.// Until you do it, the changes are cached on the client side.context.SubmitChanges();// Request the new product from the databasevar query = from it in context.Products where it.ProductID == 2000 select it;// Since we query for a single object instead of a collection, we can use the method First()Product product = query.First();Console.WriteLine("{0} | {1} | {2}", product.ProductCategory.CategoryName, product.ProductName, product.Price);Console.ReadLine();
[Visual Basic]
Dim context As CrmDemoDataContext = New CrmDemoDataContext' Create a new categoryDim newCategory As productcategory = New productcategory()newCategory.CategoryID = 1000newCategory.CategoryName = "New category"' Create a new productDim newProduct As product = New product()newProduct.ProductID = 2000newProduct.ProductName = "New product"newProduct.Price = 20' Associate the new product with the new categorynewProduct.productcategory = newCategorycontext.products.InsertOnSubmit(newProduct)' Send the changes to the database.' Until you do it, the changes are cached on the client side.context.SubmitChanges()' Request the new product from the databaseDim query = From it In context.products _ Where it.ProductID = 2000 _ Select it' Since we query for a single object instead of a collection, we can use the method First()Dim product As product = query.First()Console.WriteLine("{0} | {1} | {2}", _ product.productcategory.CategoryName, product.ProductName, product.Price)Console.ReadLine()
該InsertOnSubmit ( )方法建立的每一個集合的範疇。這種方法儲存在資料庫中的資訊都與物體。如範例中所示,它只是必要呼籲InsertOnSubmit ( )再次向這兩個產品和品類的物體。
注意,在你添加新的產品和類別,提交變更,您就可以不執行這一解決方案是再次。為執行解決方案再次更改身份證的對象將增加。
更新資料
實體的情況下被修改如常。唯一要記住的是,你必須援引SubmitChanges( )方法來發送資料到資料庫中。
附加以下塊現有的代碼和啟動項目:
[C#]
product.ProductName = "Edited product";product.Price = 15;context.SubmitChanges();
[Visual Basic]
product.ProductName = "Edited product"product.Price = 15context.SubmitChanges()
刪除資料
要提取的一個執行個體從上下文使用DeleteOnSubmit相應的方法收集。對象是從收集的類型,而不是摧毀。如果要刪除對象的資料從資料庫中調用SubmitChanges ( )方法。
為此,您可以用一段代碼如下所示:
[C#]
context.products.DeleteOnSubmit(newProduct);context.productcategories.DeleteOnSubmit(newCategory);context.SubmitChanges();
[Visual Basic]
context.products.DeleteOnSubmit(newProduct)context.productcategories.DeleteOnSubmit(newCategory)context.SubmitChanges()
刪除的對象是受屬性模型。當DeleteRule參數級聯,依賴對象的自動刪除。當此參數SetNull ,依賴對象不會被刪除,但關係是無效。當沒有規則指定的順序刪除順序是非常重要的。
其他資訊
現在,您可以執行基本的資料處理與LINQ到的SQLite ,可以進入一些進階主題。 dotConnect的SQLite包括為協助部分專門LINQ to SQL技術。您可以在網上http://www.devart.com/dotconnect/linq/docs/或當地在Visual Studio說明集合。
LINQ to SQLite是發達國家密切合作,以微軟的執行LINQ to SQL ,所以你可能會發現一些有用的資訊MSDN中:
LINQ to SQL
LINQ to SQL : 。 NETLanguage-integrated Query (LINQ)關聯式資料庫
為親身體驗使用樣品運dotConnect為的SQLite 。您可以訪問樣品從開始菜單。
為了更深入地瞭解作品的LINQ to SQL引擎,您可以看到產生的SQL語句在DBMonitor或使用DataContext.Log財產。