如何實(shí)現(xiàn)LINQ自定義業(yè)務(wù)
編者按:LINQ的基本概念大家應(yīng)該都已經(jīng)有所了解了,不過(guò)理論和實(shí)際總會(huì)有那么點(diǎn)差距。LINQ自定義業(yè)務(wù)就屬于LINQ的一個(gè)很典型的應(yīng)用,下面,我們就來(lái)一起看一看究竟怎么來(lái)實(shí)現(xiàn)LINQ自定義業(yè)務(wù)。
LINQ TO SQL很好很強(qiáng)大,它幾乎包含了我們能夠想到的所有與數(shù)據(jù)庫(kù)有關(guān)的操作,甚至也包含了一些我們可能都沒(méi)有想到的。
但不管怎樣,也許我們需要在LINQ TO SQL的操作中添加一個(gè)LINQ自定義業(yè)務(wù)邏輯,例如在插入某個(gè)實(shí)體的時(shí)候編寫(xiě)日志等等。如何實(shí)現(xiàn)這樣的功能呢?
其實(shí)這一點(diǎn),LINQ TO SQL在設(shè)計(jì)的時(shí)候也考慮到了。我們可以打開(kāi)那個(gè)dtml文件的designer.cs文件,我們發(fā)現(xiàn)有些隱藏的代碼
首先,我們看到NorthwindDataContext這個(gè)類型是一個(gè)局部類型(Partial Class),而且上述定義的一些方法也是局部方法(Partial Method)
局部方法是C# 3.0的新增特性。它使用在如下場(chǎng)景:
某個(gè)方法可有可無(wú)。通過(guò)partial 關(guān)鍵字聲明的目的是,可以讓其他地方代碼可以調(diào)用它。但如果該方法最終沒(méi)有被實(shí)現(xiàn),那么包括方法聲明以及調(diào)用代碼都會(huì)被刪除掉。
這個(gè)特性與虛方法,抽象方法都不同。
假設(shè)我們需要在InsertCustomer的時(shí)候添加一些業(yè)務(wù)邏輯,那么該怎么做呢?
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace Model
- {
- public partial class NorthwindDataContext
- {
- partial void InsertCustomer(Customer instance)
- {
- //這里可以實(shí)現(xiàn)自己的保存邏輯,根據(jù)傳入的一個(gè)Customer的實(shí)例
- this.ExecuteCommand("Insert Into.....");
- //還可以寫(xiě)日志,等等
- }
- }
- }
【注意】一旦我們這樣做了,那么插入Customer的邏輯就全部由我們來(lái)負(fù)責(zé)了。你需要確保這里面的代碼是完整的
- protected void addcustomer_Click(object sender, EventArgs e)
- {
- Model.NorthwindDataContext db = new Model.NorthwindDataContext(connectionString);
- Model.Customer c = new Model.Customer()
- {
- CustomerID = "AAAAAS",
- CompanyName = "Xizhang"
- };
- db.Customers.InsertOnSubmit(c);
- db.SubmitChanges();
- }
在db.SubmitChanges方法被調(diào)用后,會(huì)自動(dòng)調(diào)用我們寫(xiě)的那個(gè)InsertCustomer方法,也就實(shí)現(xiàn)了LINQ自定義業(yè)務(wù)。
本文出自博客園,作者陳希章
【編輯推薦】