彩票走势图

Linq to SQL Profiler使用注意事项——datacontext相关

原创|使用教程|编辑:龚雪|2014-01-23 09:16:48.000|阅读 163 次

概述:Linq to SQL Profiler是由以色列著名公司Hibernating Rhinos开发出来的数据库工具。并且该软件是由 OR/M 社区的高层领导人亲自开发设计,能够精准的帮助优化App的冗余的代码。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

Linq to SQL Profiler强烈不建议在同一个请求里写多个datacontext,这样会对数据库造成不好的影响

首先每一个单独的datacontext都会用到一个单独的数据库连接。同一个请求里有多个datacontext存在的话就意味着需要多个数据库连接,这样会影响到系统总体性能,并且给数据库增压。

其次,使用多个datacontext也意味着我们无法使用数据库内置的事务支持功能,而是依赖于系统,但是系统在事务方面的效率要慢得很多。

 再者,我们不能依赖于数据库来保证查看数据的事务安全,因为我们使用的是多个不同的事务来访问数据库。即使是使用系统事务时也是同样的道理。当在使用系统事务时,它会强迫我们使用DTC来保证所有的sessions都在同一个事务里,而DTC则会导致系统性能变差。

请参考下面一段代码,这是在单个的操作里包含了多个datacontext:

public void TransferMoney(Account from, Account to, Money amount)
{
    Dao.Withdraw(from, amount);
    Dao.Deposit(to, amount);
}

public void Withdraw(Account account, Money amount)
{
    using(var ctx = new MyBankContext())
    {
        account.MoenyAmount -= amount;
        ctx.Accounts.Attach(account);
        ctx.SaveChanges();
    }
}

public void Deposit(Account account, Money amount)
{
    using(var ctx = new MyBankContext())
    {
        account.MoenyAmount += amount;
        ctx.Accounts.Attach(account);
        ctx.SaveChanges();
    }
}

在这个示例中,我们需要对数据库进行两次调用:两个不同的datacontext各调用一次。因此,我们无法使用数据库自带的事务支持功能:由于两次调用是发生在不同的事务中。

所以,要想解决这种问题的办法就是:在一个请求里只使用一个datacontext。

>>欢迎点此免费下载和试用Linq to SQL Profiler


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP