2011-04-25 44 views
1

我使用Subsonic与SqlAzure数据库,它的工作很好。我想通过实施this blog article中提到的建议的最佳做法来改进我的申请。在Subsonic RetryPolicy

根据这篇文章,我可以这样做:

var sqlAzureRetryPolicy = ... code omitted ...; 
return sqlAzureRetryPolicy.ExecuteAction<IEnumerable<Product>>(() => 
{ 
    // Invoke a LINQ query. 
    return result; 
}); 

然而,这将意味着我将不得不遍我的解决办法复制并粘贴此代码段,我认为这将是乏味和错误我的团队的其他成员可能会忘记,等等。我不认为这是最好的解决方案,我想知道是否有更好的方法。

有人有建议如何做到这一点?

回答

1

你看过实现扩展方法吗?您可以将方法“添加”到现有类(包括IEnumerable和IQueryable)以使其看起来像该方法是类的一部分。扩展方法可以用于集中这种类型的代码。下面是一个简单的文章,展示如何扩展字符串类:http://www.developer.com/net/csharp/article.php/3592216/Using-the-New-Extension-Methods-Feature-in-C-30.htm

我个人使用扩展方法(我创建了一个TryOpen和TryExecuteReader)来完成您所要求的操作,但针对SqlCommand和SqlConnection类。所以我的代码示例不会对LINQ有所帮助。

+0

这是一个非常有趣的建议。 – desautelsj 2011-04-29 11:31:56