`

Linq to SQL 也来AOP 之 —— ALinq Inject 使用指南

阅读更多
原帖地址:http://www.cnblogs.com/ansiboy/archive/2013/06/14/3135037.html

ALinq Inject 是一个可以对 Linq to SQL 或者 ALinq 进行注入的框架,它可以对四个方法进行注入,添加实体、删除实体、更新实体和验证实体。


关于框架的下载以及程序集的引用,请查看 Linq to SQL (ALinq) 也来AOP —— ALinq Inject 博客园首发 。


ALinq Inject 是一个非常之简单易用的框架,你只需要通过继承HandlerAttribute 的类,重写其中的方法即可注入。该类一共定义了13个方法,其中三组是增删改的方法,每组四个。验证方法仅有一个。



public abstract class HandlerAttribute : Attribute
{
public virtual void OnInsertBegin(object entity, HandlerArguments args);
public virtual void OnInsertEnd(object entity, HandlerArguments args);
public virtual void OnInsertSuccess(object entity, HandlerArguments args);
public virtual void OnInsertFail(object entity, HandlerFailArguments args);

public virtual void OnUpdateBegin(object entity, HandlerArguments args);
public virtual void OnUpdateEnd(object entity, HandlerArguments args);
public virtual void OnUpdateSuccess(object entity, HandlerArguments args);
public virtual void OnUpdateFail(object entity, HandlerFailArguments args);

public virtual void OnDeleteBegin(object entity, HandlerArguments args);
public virtual void OnDeleteEnd(object entity, HandlerArguments args);
public virtual void OnDeleteSuccess(object entity, HandlerArguments args);
public virtual void OnDeleteFail(object entity, HandlerFailArguments args);

public virtual void OnValidate(object entity, ValidateArguments args);
}


通过名称,我们很容易知道,OnInsertBegin 是注入到 Insert 实体之前的,OnInsertSuccess 是注入到成功 Insert 实体后的,OnInsertFail 是注入到Insert 实体失败后的,OnInsertEnd 则是Insert操作结束,不管是否引发异常,OnInsertEnd 都会执行。对于其它函数,也同样。OnValidate 则是用来注入到验证实体的。


HandlerAttribute放在哪里


在上一篇文章的,实现了 LoggerAttribute 这个类, 并且为 NorthwindDatabase 这个类添加了 Logger 这个特性。如下:



[Logger]
partial class NorthwindDatabase:DataContext
{
}


但是事实上,你也可以将 Logger 这个特性添加到实体类。如下:



[Logger]
public
partial class Category
{
}


这两有什么区别呢?添加到 NorthwindDatabase 则对所有实体类的操作都有效,添加到 Category 实体类,则仅对 Category 实体进行操作才有效。两个地都添加了,那么对于 Category 类,将会执行两次操作。


HandlerArguments



public class HandlerArguments
{
public DataContext DataContex { get; internal set; }
public MetaTable MetaTable { get; internal set; }
}


 你可以通过重载方法中 args 参数来获得当前操作的上下文信息。关于该参数的成员:


DataContext:执行该操作的数据上下文


MetaTable:与该操作相关的元表。


HandlerFailArguments 参数



public class HandlerFailArguments : HandlerArguments
{
public Exception Exception { get; internal set; }
public bool Processed { get; set; }
}


 当执行某个操作操失败时,将会调用 OnXXXXFail 方法,通该方法的 args 参数,你可以获得关于操作失败的信息。其中:


Exception: 指的是操作失败引发的异常


Processed:你可以对该属性进行赋值,当赋值为 true 时,Exception 则不会抛出。


ValidateArguments



public class ValidateArguments
{
public ChangeAction ChangeAction { get; internal set; }
}


 ChangeAction:通过该参数,可以获得当前的操作类型(Insert、Update 或 Delete)。


关于数据的验证


对于实体的验证,是否可以放在 OnBeginInsert、OnBeginUpdate、OnBeginDelete 这些方法呢?


尽管可以,但是关于数据的验证,建议放在 OnValidate 方法内,它有下面这些好处:


1、代码更为清晰,很容易让人知道这些方法是用于验证的。


2、在调用 OnValidate 方法,连接是处于未打开的状态。不会占数据库连接的资源。即 OnBeginInsert、OnBeginUpdate、OnBeginDelete 这些方法,数据库连接都是处于打开的状态。


 


由于 ALinq Inject 实在是太简单易用了,短短一篇文章基本上就介绍完了。如果有不清楚的,或者任何建议,欢迎和我联系。


 


另外:



我现在准备动手写个长篇系列文章,内容是关于Linq to SQL的,和市面上文章的不同的地方是,我会基于设计的角度去写,让你深入地了解Linq to SQL的运行机制,以及设计准则,一定会让研究架构的朋友大呼过瘾。感兴趣的朋友,可以关注我的腾讯微博。 



 


 


 


 

本文链接

分享到:
评论

相关推荐

    一个简单的linq to sql例子

    在这个简单的LINQ to SQL例子中,我们将探讨如何使用C#来实现数据库的基本操作。 首先,我们需要包含必要的命名空间,如`System.Linq`和`System.Data.Linq`,它们提供了 LINQ to SQL 所需的类和方法。接下来,我们...

    一步步学LINQ to SQL(一)——LINQ to SQL入门.pdf

    一步步学LINQ to SQL(一)——LINQ to SQL入门.pdf

    LINQ To SQL实现分页效果源码

    在VS2008中,LINQ to SQL提供了直观的方式来映射数据库模式到.NET类,从而简化了数据访问。 分页是数据库查询中常见的需求,特别是在处理大量数据时,为了提高用户体验,我们需要一次加载少量数据。在LINQ to SQL中...

    linq基础 linq to sql

    3. 查询数据库:使用LINQ to SQL,你可以编写查询表达式来检索、过滤、排序和分组数据库记录,这些查询会被编译成T-SQL并发送到服务器执行。 4. 操作实体: LINQ to SQL支持对象状态管理,可以跟踪对象的变化,并在...

    LINQ to SQL.rar

    **LINQ to SQL** 是微软.NET Framework中的一种技术,它允许开发者使用C#或VB.NET语言的查询表达式(Language Integrated Query,简称LINQ)直接对SQL数据库进行操作。这项技术将关系数据库的数据操作与对象模型无缝...

    一步步学LINQ to SQL(二)——LINQ to SQL对数据库增、删、改及查询.pdf

    一步步学LINQ to SQL(二)——LINQ to SQL对数据库增、删、改及查询.pdf

    LINQ to SQL可视化调试工具

    总结来说,LINQ to SQL可视化调试工具是一个强大的辅助开发工具,它能帮助开发者更好地理解和优化他们的LINQ查询。通过使用提供的源代码,开发者不仅可以自定义和扩展工具的功能,还能深化对LINQ及ORM机制的理解。在...

    Linq To Sql进阶系列

    - **Linq To Sql动态查询**:Linq To Sql提供了强大的动态查询能力,允许开发者使用对象来构建查询条件,从而避免了SQL字符串拼接的问题,同时也增加了代码的可读性和安全性。 #### 7. Linq To Sql进阶系列(七)...

    LINQ TO SQL DEMO

    【标题】"LINQ TO SQL DEMO"是一个关于使用LINQ (Language Integrated Query) 技术与SQL数据库交互的示例项目。LINQ是.NET框架中的一项重要特性,它允许开发者使用C#或Visual Basic等语言的语法直接进行数据查询,...

    Linq to sql 和 Linq to Entity 高级查询

    实现linq多个查询条件连接功能(支持linq to sql 和linq to entity)。 按多个指定属性排序功能。 不同参数的lamdba表达式条件间的转换功能。

    ASP.NET MVC+LINQ TO SQL登陆

    在这个场景中,我们将讨论如何在ASP.NET MVC项目中实现一个使用LINQ to SQL的登录功能。 LINQ(Language Integrated Query,语言集成查询)是.NET Framework的一部分,它允许开发者使用C#或VB.NET等语言的语法来...

    linq to sql实现分层与gridview使用实现增删改

    在.NET框架中,LINQ(Language Integrated Query,语言集成查询)是一种强大的数据查询技术,它允许开发者使用自然、直观的代码来查询各种数据源。在本教程中,我们将重点讨论如何利用LINQ to SQL实现分层架构,并...

    Linq to sql 教程

    【Linq to sql 教程】是一门针对初学者精心设计的教程,旨在帮助学习者逐步掌握使用Linq(Language Integrated Query,语言集成查询)与SQL进行数据操作的技术。Linq是.NET框架中的一个强大特性,它允许开发人员在C#...

    浅谈Linq to sql 的多表关联与动态条件查询

    在 Linq to sql 中,我们可以使用 join 关键字来实现多表关联。例如: ``` var q = from ar in db.Articles join c in db.Categories on ar.ParentId equals c.Id join sc in db.Categories on ar.SubId equals ...

    Linq To SQL

    **LINQ to SQL** 是.NET Framework 3.5中引入的一种对象关系映射(ORM)技术,它允许开发者使用C#或VB.NET等.NET语言直接对数据库进行操作,而无需编写大量的SQL语句。通过LINQ(Language Integrated Query),...

    LINQ To Sql学习文档

    ### LINQ To Sql 学习文档关键知识点解析 #### 一、LINQ To Sql 概览 **LINQ (Language Integrated Query)** 是一种强大的查询语言,它被集成到了 .NET Framework 3.5 及其之后的版本中,并且与 C# 和 Visual ...

    linq to sql 学习笔记

    - **什么是LINQ to SQL**:它是.NET Framework 3.5引入的一个ORM(对象关系映射)工具,使开发者能够使用C#或VB.NET的查询表达式来操作数据库,将SQL查询语句转换为易于理解和维护的代码。 - **隐含类型局部变量*...

    c#linq to sql

    C# LINQ to SQL 是微软.NET Framework中的一种数据查询技术,它允许开发人员使用C#语言直接对SQL数据库进行操作,极大地简化了数据库交互的工作。LINQ(Language Integrated Query,语言集成查询)是.NET Framework ...

    LINQ to SQL手册

    **LINQ to SQL** 是 .NET Framework 中的一个技术,它允许开发者使用 C# 或 VB.NET 语言的查询表达式语法来操作数据库。本手册详细介绍了使用 LINQ to SQL 进行数据查询、操作和更新的各种方法,涵盖了从基础到高级...

    Linq to Sql 教程大全

    **LINQ to SQL** 是一种使开发人员能够使用面向对象的方法访问数据库的技术。它提供了将数据库表映射到.NET Framework中类的能力,允许开发人员通过编写LINQ查询而不是SQL语句来操作数据。 #### 二、LINQ to SQL 的...

Global site tag (gtag.js) - Google Analytics