Linq to SQL (ALinq) 也來AOP —— ALinq Inject 博客園首發


簡介

ALinq Inject 是我的又一開源項目,之前已經開源了兩個作品:

ALinq Fluent

ALinq Dynamic

這兩個開源項目都是托管在 CodePlex 上,而 ALinq Inject 是我本年度的第三個開源項目了。這個項目,我花了幾個月的時間去構思,然后再花了差不多一個月的時間去編寫,非常不容易,如果你對此感興趣,請點擊一下推薦按鈕,也就舉手之勞。

在 Linq to SQL 上使用 AOP 有什么好處?好處太多了。下面列舉幾個常見的應用情景,在這些情景中,應用AOP,可以使用代碼更為優雅。

1、數據的驗證

2、操作日志

3、數據更新的記錄。

特點

簡單易用,ALinq Inject 目前能夠注入到添加、刪除、更新、驗證四個方法,下一步將支持查詢的注入。

使用

1、Linq to SQL 用戶,引用 System.Data.Linq.Inject.dll 程序集,如果是 ALinq 用戶,則引用 ALinq.Inject.dll 。

2、創建 HandlerAttribute 的繼承類,實現注入。如下:

class LoggerAttribute : HandlerAttribute
{
    public override void OnUpdateBegin(object entity, HandlerArguments args)
    {
        Console.WriteLine("============== Begin Update ====================");
    }

    public override void OnUpdateSuccess(object entity, HandlerArguments args)
    {
        Console.WriteLine("============== Update Success ====================");
    }

    public override void OnUpdateFail(object entity, HandlerExceptionArguments args)
    {
        Console.WriteLine("============== Update Fail ====================");
        Console.WriteLine(args.Exception.Message);
        args.Processed = true;
        Console.WriteLine("===============================================");
    }

    public override void OnUpdateEnd(object entity, HandlerArguments args)
    {
        Console.WriteLine("============== Update End ====================");
    }

}

3、在 DataContext 上類上,加上 LoggerAttribute

[Logger]
partial class NorthwindDatabase
{
}

4、使用 InjectMappingSource 類,替代原來的 MappingSource(AttributeMappingSource 或 XmlMappingSource)

var mappingSource = new InjectMappingSource();
var db = new NorthwindDemo.NorthwindDatabase(conn, mappingSource)
                {
                    Log = Console.Out
                };
var c = db.Categories.First();
c.CategoryName = c.CategoryName + "x";
db.SubmitChanges();

5、運行后輸出的結果

SELECT TOP (1) [t0].[Category ID] AS [CategoryID], [t0].[Category Name] AS [CategoryName], [t0].[Description], [t0].[Picture]
FROM [Categories] AS [t0]
-- Context: SqlProvider(SqlCE) Model: ProxyMetaModel Build: 4.0.30319.17929

============== Begin Update ====================
UPDATE [Categories]
SET [Category Name] = @p1
WHERE [Category ID] = @p0
-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [1]
-- @p1: Input String (Size = 0; Prec = 0; Scale = 0) [Beveragesxxxx]
-- Context: SqlProvider(SqlCE) Model: ProxyMetaModel Build: 4.0.30319.17929

============== Update Success ====================
============== Update End ====================

從輸出的結果可以看得到,已經成功注入了。 點擊這里下載 ALinq Inject  點擊這里下載示例

感興趣的朋友,請點擊推薦(舉手之勞,哥寫這個框架可是幾個月呀),推薦數超過 100 了,我就繼續發詳細的教程,還有代碼。

 教程在這里。

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM