Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql 如何查找LINQ to SQL中受影响的行数?_Linq To Sql - Fatal编程技术网

Linq to sql 如何查找LINQ to SQL中受影响的行数?

Linq to sql 如何查找LINQ to SQL中受影响的行数?,linq-to-sql,Linq To Sql,在我提交了对LINQ to SQL中数据上下文的更改后,有人知道如何找到受影响的行数吗 起初我是这样做的: Using db as New MyDataContext() db.Users.Attach(modifiedUser, True) db.SubmitChanges() Dim rowsUpdated As Integer = db.GetChangeSet().Updates.Count End Using 从那以后,我发现这不管用,那又怎么样 db.Ge

在我提交了对LINQ to SQL中数据上下文的更改后,有人知道如何找到受影响的行数吗

起初我是这样做的:

Using db as New MyDataContext()
    db.Users.Attach(modifiedUser, True)
    db.SubmitChanges()

    Dim rowsUpdated As Integer = db.GetChangeSet().Updates.Count
End Using
从那以后,我发现这不管用,那又怎么样

db.GetChangeSet().Updates.Count
只告诉您在调用SubmitChanges()之前将有多少更新


有没有办法找出有多少行实际上受到了影响?

我还没有使用LINQ to SQL。但是,我认为这可能是不可能的


我想到的原因是:在调用
SubmitChanges
之前,可以对多个实体进行更新。所以,我想,您正在查找的“受影响的记录”不会被知道。

我还没有在LINQ to SQL上工作过。但是,我认为这可能是不可能的


我想到的原因是:在调用
SubmitChanges
之前,可以对多个实体进行更新。因此,我想,您要查找的“受影响的记录”是未知的。

因为可能会提交许多不同的操作,所以您很可能无法获取此类信息

SubmitChanges()命令将提交插入、更新和删除操作,据我所知,无法检索每个操作受影响的行数(#行已删除/更新/插入等)。你所能做的就是看看会发生什么,正如你已经发现的那样


如果您特别想执行一个操作,可以使用ExecuteCommand()方法返回受影响的行数

因为可能会提交许多不同的操作,所以您很可能无法获取此类信息

SubmitChanges()命令将提交插入、更新和删除操作,据我所知,无法检索每个操作受影响的行数(#行已删除/更新/插入等)。你所能做的就是看看会发生什么,正如你已经发现的那样


如果您特别想执行一个操作,可以使用ExecuteCommand()方法返回受影响的行数

L2S为每个受影响的行发出单独的insert/update/delete语句,因此计算GetChangeSet结果中的实体将为您提供正确的“受影响的行”编号*

如果由于更改冲突或类似原因而无法更新任何行,则在提交更改期间将出现异常,事务将回滚


(*=…有一个例外;如果您有任何带有instead of触发器的可更新视图,您可能会遇到这样的情况:instead of触发器针对每一个更新的行命中多个基础行。但这有点像边缘情况…)

L2S针对每个受影响的行发出单独的insert/update/delete语句,因此,计算GetChangeSet结果中的实体将为您提供正确的“受影响的行”数字*

如果由于更改冲突或类似原因而无法更新任何行,则在提交更改期间将出现异常,事务将回滚


(*=…有一个例外;如果您有任何可更新的视图,且带有instead of触发器,则可能会出现instead of触发器针对每一更新行命中多个基础行的情况。但这有点像边缘情况…:)

将此扩展方法添加到应用程序:

  /// <summary>
    /// Saves all chanches made in this context to the underlying database.
    /// </summary>
    /// <returns></returns>
    /// <exception cref="System.InvalidOperationException">
    /// </exception>
    public static int SaveChanges(this System.Data.Linq.DataContext context)
    {
        try
        {
            int count1 = context.GetChangeSet().Inserts.Count + context.GetChangeSet().Updates.Count + context.GetChangeSet().Deletes.Count;
            context.SubmitChanges();
            int count2 = context.GetChangeSet().Inserts.Count + context.GetChangeSet().Updates.Count + context.GetChangeSet().Deletes.Count;
            return count1 - count2;
        }
        catch (Exception e)
        {
            throw new InvalidOperationException(e.Message);
        }
    }
//
///将在此上下文中进行的所有更改保存到基础数据库。
/// 
/// 
/// 
/// 
公共静态int SaveChanges(此System.Data.Linq.DataContext上下文)
{
尝试
{
int count1=context.GetChangeSet().Inserts.Count+context.GetChangeSet().Updates.Count+context.GetChangeSet().Deletes.Count;
context.SubmitChanges();
int count2=context.GetChangeSet().Inserts.Count+context.GetChangeSet().Updates.Count+context.GetChangeSet().Deletes.Count;
返回count1-count2;
}
捕获(例外e)
{
抛出新的InvalidOperationException(例如消息);
}
}

将此扩展方法添加到应用程序:

  /// <summary>
    /// Saves all chanches made in this context to the underlying database.
    /// </summary>
    /// <returns></returns>
    /// <exception cref="System.InvalidOperationException">
    /// </exception>
    public static int SaveChanges(this System.Data.Linq.DataContext context)
    {
        try
        {
            int count1 = context.GetChangeSet().Inserts.Count + context.GetChangeSet().Updates.Count + context.GetChangeSet().Deletes.Count;
            context.SubmitChanges();
            int count2 = context.GetChangeSet().Inserts.Count + context.GetChangeSet().Updates.Count + context.GetChangeSet().Deletes.Count;
            return count1 - count2;
        }
        catch (Exception e)
        {
            throw new InvalidOperationException(e.Message);
        }
    }
//
///将在此上下文中进行的所有更改保存到基础数据库。
/// 
/// 
/// 
/// 
公共静态int SaveChanges(此System.Data.Linq.DataContext上下文)
{
尝试
{
int count1=context.GetChangeSet().Inserts.Count+context.GetChangeSet().Updates.Count+context.GetChangeSet().Deletes.Count;
context.SubmitChanges();
int count2=context.GetChangeSet().Inserts.Count+context.GetChangeSet().Updates.Count+context.GetChangeSet().Deletes.Count;
返回count1-count2;
}
捕获(例外e)
{
抛出新的InvalidOperationException(例如消息);
}
}

按下面的顺序调用,您将获得计数

Dim rowsUpdated As Integer=db.GetChangeSet().Updates.Count


db.SubmitChanges()

按下面的顺序调用,您将获得计数

Dim rowsUpdated As Integer=db.GetChangeSet().Updates.Count

db.SubmitChanges()