linq to sql在新增和修改时的验证实现

mac2022-06-30  19

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上百实例源码以及开源项目
最新回复(0)