linq to sql为我们提供了集成运行时的ORM支持,非常方便实现CURD操作,并且提供了很好的扩展框架,验证规则的插入就是一个很好的例子。 下面以往northwind数据库的product表插入一条记录为例来介绍linq to sql的验证逻辑吧 通常我们是这样插入一条product记录的 NorthwindDataConextDataContext db = new NorthwindDataConextDataContext(); Product p1 = new Product(); p1.ProductName = "ghb11111"; p1.CategoryID = 1; p1.UnitPrice = 1; p1.UnitsInStock = 1; db.Products.InsertOnSubmit(p1); db.SubmitChanges(); 假如我们有如下新增需要,只允许所有产品名称开头为1的产品才可以添加到数据库当中,这个规则是我们自己的,自然linq to sql的代码是没有这么做,那么我们怎么才能在改动最少的情况下增加这样的验证规则呢,你可能说在上面倒数第2行代码之前插入一个产品名称是包含开头字母为1的判断就行,如果不包含则不执行倒数两行代码,否则就执行,如果这样那假如我们有100个地方有插入产品的代码,那这100处都要改了,其实linq to sql已经为我们想到了,有两种方式可以让我们很容易实现。 一、添加NorthwindDataConextDataContext局部类partial class NorthwindDataConextDataContext { partial void InsertProduct(Product instance) { //to do valid rule if (!instance.ProductName.StartsWith("1")) { throw new Exception("开头未包含1"); } this.ExecuteDynamicInsert(instance); } }这样当执行db.SubmitChanges();InsertProduct方法自动被调用,不过你要记得红色行的那一句不能少。 二、添加product局部类 partial class product { //添加局部方法 partial void OnValidate(System.Data.Linq.ChangeAction action) { if (!ProductName.StartsWith("1")) { throw new Exception("开头未包含1"); } } } 这样当执行db.SubmitChanges();OnValidate方法自动被调用 局部方法在vs2008中提供了完全的智能感应,你不用担心到底是onValidate还是OnValidate,就像以前的override一样通过智能感应选择就行了,呵。不得不佩服ms的强憾
shore 2008-01-10 18:31 发表评论转载于:https://www.cnblogs.com/hotsoho.net/archive/2008/01/10/1206599.html
相关资源:JAVA上百实例源码以及开源项目