Linq to sql 如何查找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
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()