- 浏览: 83697 次
文章分类
- 全部博客 (136)
- 我的技术资料收集 (98)
- 具体技术 (1)
- 的技术资料收集 (4)
- All Articles (1)
- 机器学习 Machine Learning (1)
- 网络编程 (1)
- java (2)
- ava (1)
- 零散技术 (1)
- C# (3)
- 技术资料收集 (1)
- CQRS (1)
- 数据库技术(MS SQL) (1)
- .Net微观世界 (1)
- Oracle SQL学习之路 (1)
- C/C++ (1)
- JS/JQ (1)
- Js封装的插件/实例/方法 (2)
- 敏捷个人 (2)
- Javascript (1)
- 程序设计---设计模式 (1)
- Bug (1)
- 未知分类 (1)
- 程序设计 (1)
- Sharepoint (1)
- Computer Graphic (1)
- IT产品 (1)
- [06]JS/jQuery (1)
- [07]Web开发 (1)
- .NET Solution (1)
- Android (3)
- 机器学习 (1)
- 系统框架设计 (1)
- Others (1)
- 算法 (1)
- 基于Oracle Logminer数据同步 (1)
- 网页设计 (1)
- 原创翻译 (1)
- EXTJS (1)
- Jqgrid (1)
- 云计算 (1)
最新评论
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的运行机制,以及设计准则,一定会让研究架构的朋友大呼过瘾。感兴趣的朋友,可以关注我的腾讯微博。
发表评论
-
C#WebBrowser控件使用教程与技巧收集--苏飞收集 - sufeinet
2013-06-28 12:07 1067原帖地址:http://www.cnblogs.com/suf ... -
我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】
2013-06-28 12:01 1126原帖地址:http://www.cnblogs.com/lao ... -
[翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
2013-06-28 11:43 620原帖地址:http://www.cnblogs.com/ese ... -
memcahd 命令操作详解 - 阿正-WEB
2013-06-28 11:37 469原帖地址:http://www.cnblogs.com/azh ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 593原帖地址:http://www.cnblogs.com/ste ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 558原帖地址:http://www.cnblogs.com/ste ... -
RPG游戏之组队测试 - zthua
2013-06-27 10:22 557原帖地址:http://www.cnblogs.com/zth ... -
IT人们给个建议 - SOUTHER
2013-06-26 14:06 523原帖地址:http://www.cnblogs.com/sou ... -
Java向前引用容易出错的地方 - 银河使者
2013-06-26 14:00 492原帖地址:http://www.cnblogs.com/nok ... -
使用Func<T1, T2, TResult> 委托返回匿名对象 - 灰身
2013-06-26 13:54 800原帖地址:http://www.cnblo ... -
【web前端面试题整理03】来看一点CSS相关的吧 - 叶小钗
2013-06-25 10:45 783原帖地址:http://www.cnblogs.com/yex ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 10:27 618原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 10:21 562原帖地址:http://www.cnblo ... -
CentOS下Mysql安装教程 - 小学徒V
2013-06-23 15:24 608原帖地址:http://www.cnblogs.com/xia ... -
vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) - skyme
2013-06-23 15:18 836原帖地址:http://www.cnblogs.com/sky ... -
之前专门为IE6、7开发的网站如何迁移到IE10及可能遇到的问题和相应解决方案汇总 - 海之澜
2013-06-23 15:12 949原帖地址:http://www.cnblogs.com/wuz ... -
Android学习笔记--解析XML之SAX - 承香墨影
2013-06-23 15:01 407原帖地址:http://www.cnblo ... -
SQL Server 性能优化之——T-SQL TVF和标量函数
2013-06-19 09:32 670原帖地址:http://www.cnblogs.com/Boy ... -
Nginx学习笔记(二) Nginx--connection&request
2013-06-19 09:26 665原帖地址:http://www.cnblogs.com/cod ... -
从郭美美霸气侧漏看项目管理之项目经理防身术
2013-06-19 09:20 499原帖地址:http://www.cnblogs.com/had ...
相关推荐
在这个简单的LINQ to SQL例子中,我们将探讨如何使用C#来实现数据库的基本操作。 首先,我们需要包含必要的命名空间,如`System.Linq`和`System.Data.Linq`,它们提供了 LINQ to SQL 所需的类和方法。接下来,我们...
一步步学LINQ to SQL(一)——LINQ to SQL入门.pdf
在VS2008中,LINQ to SQL提供了直观的方式来映射数据库模式到.NET类,从而简化了数据访问。 分页是数据库查询中常见的需求,特别是在处理大量数据时,为了提高用户体验,我们需要一次加载少量数据。在LINQ to SQL中...
3. 查询数据库:使用LINQ to SQL,你可以编写查询表达式来检索、过滤、排序和分组数据库记录,这些查询会被编译成T-SQL并发送到服务器执行。 4. 操作实体: LINQ to SQL支持对象状态管理,可以跟踪对象的变化,并在...
**LINQ to SQL** 是微软.NET Framework中的一种技术,它允许开发者使用C#或VB.NET语言的查询表达式(Language Integrated Query,简称LINQ)直接对SQL数据库进行操作。这项技术将关系数据库的数据操作与对象模型无缝...
一步步学LINQ to SQL(二)——LINQ to SQL对数据库增、删、改及查询.pdf
总结来说,LINQ to SQL可视化调试工具是一个强大的辅助开发工具,它能帮助开发者更好地理解和优化他们的LINQ查询。通过使用提供的源代码,开发者不仅可以自定义和扩展工具的功能,还能深化对LINQ及ORM机制的理解。在...
- **Linq To Sql动态查询**:Linq To Sql提供了强大的动态查询能力,允许开发者使用对象来构建查询条件,从而避免了SQL字符串拼接的问题,同时也增加了代码的可读性和安全性。 #### 7. Linq To Sql进阶系列(七)...
【标题】"LINQ TO SQL DEMO"是一个关于使用LINQ (Language Integrated Query) 技术与SQL数据库交互的示例项目。LINQ是.NET框架中的一项重要特性,它允许开发者使用C#或Visual Basic等语言的语法直接进行数据查询,...
实现linq多个查询条件连接功能(支持linq to sql 和linq to entity)。 按多个指定属性排序功能。 不同参数的lamdba表达式条件间的转换功能。
在这个场景中,我们将讨论如何在ASP.NET MVC项目中实现一个使用LINQ to SQL的登录功能。 LINQ(Language Integrated Query,语言集成查询)是.NET Framework的一部分,它允许开发者使用C#或VB.NET等语言的语法来...
在.NET框架中,LINQ(Language Integrated Query,语言集成查询)是一种强大的数据查询技术,它允许开发者使用自然、直观的代码来查询各种数据源。在本教程中,我们将重点讨论如何利用LINQ to SQL实现分层架构,并...
【Linq to sql 教程】是一门针对初学者精心设计的教程,旨在帮助学习者逐步掌握使用Linq(Language Integrated Query,语言集成查询)与SQL进行数据操作的技术。Linq是.NET框架中的一个强大特性,它允许开发人员在C#...
在 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** 是.NET Framework 3.5中引入的一种对象关系映射(ORM)技术,它允许开发者使用C#或VB.NET等.NET语言直接对数据库进行操作,而无需编写大量的SQL语句。通过LINQ(Language Integrated Query),...
### LINQ To Sql 学习文档关键知识点解析 #### 一、LINQ To Sql 概览 **LINQ (Language Integrated Query)** 是一种强大的查询语言,它被集成到了 .NET Framework 3.5 及其之后的版本中,并且与 C# 和 Visual ...
- **什么是LINQ to SQL**:它是.NET Framework 3.5引入的一个ORM(对象关系映射)工具,使开发者能够使用C#或VB.NET的查询表达式来操作数据库,将SQL查询语句转换为易于理解和维护的代码。 - **隐含类型局部变量*...
C# LINQ to SQL 是微软.NET Framework中的一种数据查询技术,它允许开发人员使用C#语言直接对SQL数据库进行操作,极大地简化了数据库交互的工作。LINQ(Language Integrated Query,语言集成查询)是.NET Framework ...
**LINQ to SQL** 是 .NET Framework 中的一个技术,它允许开发者使用 C# 或 VB.NET 语言的查询表达式语法来操作数据库。本手册详细介绍了使用 LINQ to SQL 进行数据查询、操作和更新的各种方法,涵盖了从基础到高级...
**LINQ to SQL** 是一种使开发人员能够使用面向对象的方法访问数据库的技术。它提供了将数据库表映射到.NET Framework中类的能力,允许开发人员通过编写LINQ查询而不是SQL语句来操作数据。 #### 二、LINQ to SQL 的...