【发布时间】:2013-12-20 15:51:00
【问题描述】:
摘自本书:“Julia Lerman - 编程实体框架”
在 EF 中创建新实体时:
var contact = Contact.CreateContact(0, "Camey", "Combs", DateTime.Now, DateTime.Now);
context.Contacts.AddObject(contact);
context.SaveChanges();
生成的sql:
exec sp_executesql N'insert [dbo].[Contact]([FirstName], [LastName], [Title],
[AddDate], [ModifiedDate])
values (@0, @1, null, @2, @3)
select [ContactID]
from [dbo].[Contact]
where @@ROWCOUNT > 0 and [ContactID] = scope_identity()',
N'@0 nvarchar(50),@1 nvarchar(50),@2 datetime2(7),@3 datetime2(7)',
@0=N'Camey',@1=N'Combs',@2='2009-08-30 09:27:31.7449098',
@3='2009-11-30 09:27:31.7449098'
@@RowCount > 0 在 where 子句中用于什么?
我不确定它根据 msdn 会返回受影响的行数, 据我了解,这只是验证已添加联系人记录的一种方式 他们也可以写@@ROWCOUNT = 1
这是正确的吗?
【问题讨论】:
-
对基表的查询似乎没有必要。您可以对
SELECT scope_identity() AS ContactID WHERE @@ROWCOUNT > 0执行相同的操作,除非获取返回的ContactID的确切数据类型很重要。也许检查触发器并没有改变我认为的任何东西。
标签: sql-server entity-framework tsql