如何看待在LINQ to SQL中的SubmitChanges上导致错误的sql?

Gle*_*ven 6 .net c# sql linq linq-to-sql

我有一些LINQ to SQL,有时会抛出一个

"无法在对象'dbo.Table'中插入具有唯一索引'IX_Indexname'的重复键行.该语句已被终止."

有没有什么方法可以打开日志记录或至少调试到datacontext,看看在出现错误时正在执行什么SQL?

更新: 我应该提到我知道的GetChangeSet()方法,我想知道如果有一个显示已执行的最后一个SQL,或在SQL异常,显示了SQL财产上的DataContext属性.

关于此错误的奇怪之处在于,在更改集中,只有一个更新,并且唯一正在更改的字段是不在导致错误的索引中的日期时间字段.

Bra*_*ger 11

一个简单的方法是使用DataContext.Log属性:

using (MyDataContext ctx = new MyDataContext())
{
    StringWriter sw = new StringWriter();
    ctx.Log = sw;

    // execute some LINQ to SQL operations...

    string sql = sw.ToString();
    // put a breakpoint here, log it to a file, etc...
}   
Run Code Online (Sandbox Code Playgroud)

  • 使用SQL事件探查器是首选解决方案,因为您根本不必更改代码. (5认同)