Linq to SQL Delete时遇到问题的解决方法


1.1、

Code1:
using (PubsDataContext pubsContent = new PubsDataContext())
{
pubsContent.Log = Console.Out;
Author author = pubsContent.Authors.Single(a => a.au_id == "111-11-1111");
pubsContent.Authors.DeleteOnSubmit(author);
pubsContent.SubmitChanges();
}

可是,马上我的程序支持到这里就跑不动了,第二行有异常。

SELECT [t0].[au_id], [t0].[au_lname], [t0].[au_fname], [t0].[phone],
[t0].[address], [t0].[city], [t0].[state], [t0].[zip], [t0].[contract] FROM [dbo].[authors] AS [t0] WHERE [t0].[au_id] LIKE @p0 -- @p0: Input VarChar (Size = 11; Prec = 0; Scale = 0) [111-11-111%] -- Context: SqlProvider(Sql2000) Model: AttributedMetaModel Build: 3.5.21022.8 DELETE FROM [dbo].[authors] WHERE ([au_id] = @p0) AND ([au_lname] = @p1)
AND ([au_fname] = @p2) AND ([phone] = @p3) AND ([address] = @p4)
AND ([city] = @p5) AND ([state] = @p6) AND ([zip] = @p7) AND ([contract] = 1) -- @p0: Input VarChar (Size = 11; Prec = 0; Scale = 0) [111-11-1111] -- @p1: Input VarChar (Size = 3; Prec = 0; Scale = 0) [qqq] -- @p2: Input VarChar (Size = 3; Prec = 0; Scale = 0) [qqq] -- @p3: Input Char (Size = 12; Prec = 0; Scale = 0) [qqq ] -- @p4: Input VarChar (Size = 3; Prec = 0; Scale = 0) [qqq] -- @p5: Input VarChar (Size = 3; Prec = 0; Scale = 0) [qqq] -- @p6: Input Char (Size = 2; Prec = 0; Scale = 0) [qq] -- @p7: Input Char (Size = 5; Prec = 0; Scale = 0) [22222] -- Context: SqlProvider(Sql2000) Model: AttributedMetaModel Build: 3.5.21022.8 DELETE FROM [dbo].[authors] WHERE ([au_id] = @p0) AND ([au_lname] = @p1)
AND ([au_fname] = @p2) AND ([phone] = @p3) AND ([address] = @p4)
AND ([city] = @p5) AND ([state] = @p6) AND ([zip] = @p7) AND ([contract] = 1) -- @p0: Input VarChar (Size = 11; Prec = 0; Scale = 0) [111-11-1112] -- @p1: Input VarChar (Size = 3; Prec = 0; Scale = 0) [qqq] -- @p2: Input VarChar (Size = 3; Prec = 0; Scale = 0) [qqq] -- @p3: Input Char (Size = 12; Prec = 0; Scale = 0) [qqq ] -- @p4: Input VarChar (Size = 3; Prec = 0; Scale = 0) [qqq] -- @p5: Input VarChar (Size = 3; Prec = 0; Scale = 0) [qqq] -- @p6: Input Char (Size = 2; Prec = 0; Scale = 0) [qq] -- @p7: Input Char (Size = 5; Prec = 0; Scale = 0) [22222]

很失望,和我期待的结果不一样。

在这个测试中,DataContent先把所有符合条件的记录全部取回来,再一个一个Delete。

如果要删除的有10000条记录的话,天都黑了...

这点,不得不说Linq to sql有点笨了。

3

解决?

只能绕个圈子了。

DataContext提供有ExecuteCommend方法,可能使用此方法直接执行SQL命令。比如这样:

Code 4:
using (PubsDataContext pubsContent = new PubsDataContext())
{
pubsContent.Log = Console.Out;
pubsContent.ExecuteCommand("delete from Authors where au_id like '111-11-111%'");
}

也可以通过DataContext.Connection取得当前的数据库连接,然后再通过DBCommend来提交自己的SQL语句,

或者写个存储过程来负责删除。

4

LINQ,语言级集成查询(Language INtegrated Query)

明显,强在查询,删除就弱弱点 ;-)...


« 
» 
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3