编者按:LINQ的基本概念大家应该都已经有所了解了,不过理论和实际总会有那么点差距。LINQ自定义业务就属于LINQ的一个很典型的应用,下面,我们就来一起看一看究竟怎么来实现LINQ自定义业务。
LINQ TO SQL很好很强大,它几乎包含了我们能够想到的所有与数据库有关的操作,甚至也包含了一些我们可能都没有想到的。
但不管怎样,也许我们需要在LINQ TO SQL的操作中添加一个LINQ自定义业务逻辑,例如在插入某个实体的时候编写日志等等。如何实现这样的功能呢?
其实这一点,LINQ TO SQL在设计的时候也考虑到了。我们可以打开那个dtml文件的designer.cs文件,我们发现有些隐藏的代码
首先,我们看到NorthwindDataContext这个类型是一个局部类型(Partial Class),而且上述定义的一些方法也是局部方法(Partial Method)
局部方法是C# 3.0的新增特性。它使用在如下场景:
某个方法可有可无。通过partial 关键字声明的目的是,可以让其他地方代码可以调用它。但如果该方法最终没有被实现,那么包括方法声明以及调用代码都会被删除掉。
这个特性与虚方法,抽象方法都不同。
假设我们需要在InsertCustomer的时候添加一些业务逻辑,那么该怎么做呢?
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace Model
- {
- public partial class NorthwindDataContext
- {
- partial void InsertCustomer(Customer instance)
- {
- //这里可以实现自己的保存逻辑,根据传入的一个Customer的实例
- this.ExecuteCommand("Insert Into.....");
- //还可以写日志,等等
- }
- }
- }
【注意】一旦我们这样做了,那么插入Customer的逻辑就全部由我们来负责了。你需要确保这里面的代码是完整的
- 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方法被调用后,会自动调用我们写的那个InsertCustomer方法,也就实现了LINQ自定义业务。
本文出自博客园,作者陈希章
【编辑推荐】