1.使用SQL Profiler监控两条EF添加实体生成的SQL语句分别如下:
(1)
exec sp_executesql N'DECLARE @generated_keys table([UserID] uniqueidentifier)
INSERT [dbo].[RS_Users]([Account], [PassWord])
OUTPUT inserted.[UserID] INTO @generated_keys
VALUES (@0, @1)
SELECT t.[UserID], t.[Sort]
FROM @generated_keys AS g JOIN [dbo].[RS_Users] AS t ON g.[UserID] = t.[UserID]
WHERE @@ROWCOUNT > 0',N'@0 nvarchar(50),@1 nchar(32)',@0=N'qinao',@1=N'123 '
(2)
exec sp_executesql N'INSERT [dbo].[RS_Users]([UserID], [Account], [PassWord])
VALUES (@0, @1, @2)
SELECT [Sort]
FROM [dbo].[RS_Users]
WHERE @@ROWCOUNT > 0 AND [UserID] = @0',N'@0 uniqueidentifier,@1 nvarchar(50),@2 nchar(32)',@0='00000000-0000-0000-0000-000000000000',@1=N'qinao',@2=N'123 '
2.实体类和添加实体的代码
public partial class RS_Users
{
public System.Guid UserID { get; set; }
public string Account { get; set; }
public string PassWord { get; set; }
public int Sort { get; set; }
}
============================
RS_Users user = new RS_Users()
{
Account = "qinao",
PassWord = "123"
};
dbcontext.RS_Users.Add(user);
dbcontext.SaveChanges();
3.疑问
第一条sql语句我是将UserID在映射文件中设置成了标识列属性生成的。第二条是去掉标识属性后生成的。我看到第一条sql语句有连接查询而第二条没有。第一条语句相比第二条语句谁效率更高?又怎么验证呢?
看销效率,直接两条语句一起跑,看资源占用的百分比。
这个结果意味着效率是一样的?
@duguao: 貌似只能看具体的查询计划了。才疏学浅,不懂更复杂的了。
@幻天芒: 好吧。谢谢。