ORM組件 ELinq (五)-映射配置之XML


ORM組件 ELinq (五) -映射配置之XML

上節介紹了基於FluentAPI的映射配置方式,本節我們將親自動手,一步一步搭建ELinq的XML映射程序來。備注我使用的開發環境:VS2010,Nuget 包管理器,SqlCe3.5

1.獲取ELinq

從Nuget 控制台下載安裝ELinq:install-package ELinq,安裝成功后,VS的項目就自動引用了ELinq.dll,並且自動添加了ELinq.xsd (xml mapping 的Schema 文件)、Northwind.cs和Northwind.Mapping.xml 等Demo文件,由於第一次使用,所以把Northwind.cs和Northwind.Mapping.xml這兩個文件先刪掉。

2. 建數據庫

 打開SqlCe3.5 數據庫,建立客戶表:Customer ,過程略

3. 創建和設計持久化類

3-1創建和設計持久化類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace XMLMappingDemo.PO
{
    public class Customer
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

3-2 編寫XML映射文件  

提示:要為ELinq的XML映射配置添加智能提示功能,需要把ELinq.xsd 文件復制到X:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas目錄即可

ELinq.Xsd 定義了Mapping、Table、Id、Column、ComputedColumn、Association、Version等映射元素

創建Customer.Mapping.xml,並輸入如下內容

4. 創建和設計DbContext

4-1 創建DbConfiguration

 注意:需要設置Customer.mapping.xml 文件的"Build Action"屬性為:null,"Copy To Output Directory"屬性為:Always

4-2 創建DbContext

    class DemoContext:DbContext
    {
        static DbConfiguration configuration = DbConfiguration.ConfigureSqlCe35("Db.sdf")
            .SetSqlLogger(() => new SqlLog(Console.Out))
            .AddFile(@"Mappings\Customer.mapping.xml")
            ;

        public DemoContext() : base(configuration) { }

        public IDbSet<Customer> Customers { get; set; }
    }

5. 測試

5.1 清空記錄

在進行測試前,先刪除所有記錄,並檢查表中的記錄一定為0

        [Test]
        public void ClearAll()
        {
            using (var db = new DemoContext())
            {
                db.Customers.Delete(p => true);
                Assert.AreEqual(0, db.Customers.Count());
            }
        }

下面是輸出的SQL語句

DELETE FROM [Customer]
WHERE  1=1 

SELECT COUNT(*)
FROM [Customer] AS t0

5-2 添加記錄

添加一條記錄,並檢查客戶Id已經自動返回

//插入
var customer = new Customer { FirstName = "風雲", LastName = "" };
Assert.AreEqual(0, customer.Id);
db.Customers.Insert(customer);
Assert.IsTrue(customer.Id > 0);

SQL輸出

INSERT INTO [Customer]([FirstName], [LastName])
VALUES (@p0, @p1)
-- p0:(DbType = String,Value = 風雲)
-- p1:(DbType = String,Value = 王)

SELECT @@IDENTITY AS [Id]

 5-3 查詢記錄

為了確保上一步已經插入到數據庫中,這一步做一個查詢檢查,把查詢結果轉換成DataTable並輸出數據

                //查詢
                var items = from c in db.Customers
                            where c.FirstName == "風雲"
                            select c;

                var tb = Mapper.Map<IQueryable<Customer>, DataTable>(items);

                tb.WriteXml(Console.Out);

 SQL輸出

SELECT t0.[Id], t0.[FirstName], t0.[LastName]
FROM [Customer] AS t0
WHERE (t0.[FirstName] = @p0)
-- p0:(DbType = String,Value = 風雲)

<DocumentElement>
  <Customer>
    <Id>9</Id>
    <FirstName>風雲</FirstName>
    <LastName></LastName>
  </Customer>
</DocumentElement>

5-4 更新記錄

customer.LastName = "dd";
var effectedRow = db.Customers.Update(customer);
 Assert.AreEqual(1, effectedRow);

SQL輸出

UPDATE [Customer]
SET [FirstName] = @p0, [LastName] = @p1
WHERE (([Id]=9))
-- p0:(DbType = String,Value = 風雲)
-- p1:(DbType = String,Value = dd)
5-5 查詢記錄

為了確保上一步已經更新到數據庫中,這一步做一個查詢檢查,把查詢結果轉換成DataTable並輸出數據

//查詢
items = from c in db.Customers
        where c.FirstName == "風雲"
        select c;

 tb = Mapper.Map<IQueryable<Customer>, DataTable>(items);

 tb.WriteXml(Console.Out);

 SQL輸出

SELECT t0.[Id], t0.[FirstName], t0.[LastName]
FROM [Customer] AS t0
WHERE (t0.[FirstName] = @p0)
-- p0:(DbType = String,Value = 風雲)

<DocumentElement>
  <Customer>
    <Id>9</Id>
    <FirstName>風雲</FirstName>
    <LastName>dd</LastName>
  </Customer>
</DocumentElement>

5-6 刪除記錄

db.Customers.Delete(p => p.Id == customer.Id);
Assert.AreEqual(0, db.Customers.Count());

SQL輸出

DELETE FROM [Customer]
WHERE (([Id]=9))

SELECT COUNT(*)
FROM [Customer] AS t0

結語

在這篇文章中,我們使用ELinq來構建了一個最基本的項目,沒有體現ELinq更多細節,只描繪了ELinq的Xml映射的以及單表的CRUD操作。當然使用ELinq有各種各樣的程序架構,本系列未做處理,更多實戰知識以后介紹,下一節將介紹基於約定的方式進行映射配置。

技術支持:

  1. 官方網站
  2. Nuge 下載頁面
  3. ORM組件 ELinq系列
  4. ORM組件 ELinq 更新日志
  5. ORM組件 ELinq 使用答疑
  6. 在我的博客留言,我會盡可能地抽時間來答復大家的問題。
  7. 加入 ELinq用戶的 QQ群(271342583)。

   謝謝大家的閱讀,麻煩大伙點一下推薦,再次謝謝大家。 ^_^


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM