Entity framework 为什么实体框架代码首先为单个插入打开关闭4个不同的数据库连接?
我在EF code first场景的表中插入了一行,但在检查日志时,我可以看到4种不同的打开/关闭连接和相关活动 我认为,这是EF的默认行为 有人能告诉我更多关于这个的信息吗Entity framework 为什么实体框架代码首先为单个插入打开关闭4个不同的数据库连接?,entity-framework,Entity Framework,我在EF code first场景的表中插入了一行,但在检查日志时,我可以看到4种不同的打开/关闭连接和相关活动 我认为,这是EF的默认行为 有人能告诉我更多关于这个的信息吗 var ninja = new Ninja { Name = "SampsonSan", ServedInOniwaban = false, DateOfBirth = new DateTime(2008, 1, 28),
var ninja = new Ninja
{
Name = "SampsonSan",
ServedInOniwaban = false,
DateOfBirth = new DateTime(2008, 1, 28),
ClanId = 1
};
using (var context = new NinjaContext())
{
context.Database.Log = Console.WriteLine;
context.Ninjas.Add(ninja);
context.SaveChanges();
}
日志
1。2015年3月10日上午11:18:45+05:30打开的连接
SELECT Count(*)
FROM INFORMATION_SCHEMA.TABLES AS t
WHERE t.TABLE_SCHEMA + '.' + t.TABLE_NAME IN ('dbo.Clans','dbo.NinjaEquipments','dbo.Ninjas')
OR t.TABLE_NAME = 'EdmMetadata'
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [GroupBy1]
SELECT TOP (1)
[Project1].[C1] AS [C1],
[Project1].[MigrationId] AS [MigrationId],
[Project1].[Model] AS [Model],
[Project1].[ProductVersion] AS [ProductVersion]
FROM ( SELECT
[Extent1].[MigrationId] AS [MigrationId],
[Extent1].[Model] AS [Model],
[Extent1].[ProductVersion] AS [ProductVersion],
1 AS [C1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [Project1]
ORDER BY [Project1].[MigrationId] DESC
--于2015年3月10日上午11:18:45+05:30执行
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
--在12毫秒内完成,结果:3
2015年3月10日上午11:18:45+05:30关闭连接
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
2。于2015年3月10日11:18:46 AM+05:30打开连接
SELECT Count(*)
FROM INFORMATION_SCHEMA.TABLES AS t
WHERE t.TABLE_SCHEMA + '.' + t.TABLE_NAME IN ('dbo.Clans','dbo.NinjaEquipments','dbo.Ninjas')
OR t.TABLE_NAME = 'EdmMetadata'
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [GroupBy1]
SELECT TOP (1)
[Project1].[C1] AS [C1],
[Project1].[MigrationId] AS [MigrationId],
[Project1].[Model] AS [Model],
[Project1].[ProductVersion] AS [ProductVersion]
FROM ( SELECT
[Extent1].[MigrationId] AS [MigrationId],
[Extent1].[Model] AS [Model],
[Extent1].[ProductVersion] AS [ProductVersion],
1 AS [C1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [Project1]
ORDER BY [Project1].[MigrationId] DESC
--p__linq__0:'DataModel.Migrations.Configuration'(Type=String,Size=4000)
--于2015年3月10日上午11:18:47+05:30执行
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
--在34毫秒内完成,结果为:SqlDataReader
2015年3月10日上午11:18:47+05:30关闭连接
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
3。于2015年3月10日11:18:47 AM+05:30打开连接
SELECT Count(*)
FROM INFORMATION_SCHEMA.TABLES AS t
WHERE t.TABLE_SCHEMA + '.' + t.TABLE_NAME IN ('dbo.Clans','dbo.NinjaEquipments','dbo.Ninjas')
OR t.TABLE_NAME = 'EdmMetadata'
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [GroupBy1]
SELECT TOP (1)
[Project1].[C1] AS [C1],
[Project1].[MigrationId] AS [MigrationId],
[Project1].[Model] AS [Model],
[Project1].[ProductVersion] AS [ProductVersion]
FROM ( SELECT
[Extent1].[MigrationId] AS [MigrationId],
[Extent1].[Model] AS [Model],
[Extent1].[ProductVersion] AS [ProductVersion],
1 AS [C1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [Project1]
ORDER BY [Project1].[MigrationId] DESC
--p__linq__0:'DataModel.Migrations.Configuration'(Type=String,Size=4000)
--于2015年3月10日上午11:18:47+05:30执行
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
--在25毫秒内完成,结果为:SqlDataReader
2015年3月10日上午11:18:47+05:30关闭连接
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
4。于2015年3月10日11:18:47 AM+05:30打开连接
SELECT Count(*)
FROM INFORMATION_SCHEMA.TABLES AS t
WHERE t.TABLE_SCHEMA + '.' + t.TABLE_NAME IN ('dbo.Clans','dbo.NinjaEquipments','dbo.Ninjas')
OR t.TABLE_NAME = 'EdmMetadata'
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [GroupBy1]
SELECT TOP (1)
[Project1].[C1] AS [C1],
[Project1].[MigrationId] AS [MigrationId],
[Project1].[Model] AS [Model],
[Project1].[ProductVersion] AS [ProductVersion]
FROM ( SELECT
[Extent1].[MigrationId] AS [MigrationId],
[Extent1].[Model] AS [Model],
[Extent1].[ProductVersion] AS [ProductVersion],
1 AS [C1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [Project1]
ORDER BY [Project1].[MigrationId] DESC
于2015年3月10日11:18:47 AM+05:30开始交易
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
--@0:'SampsonSan'(类型=字符串,大小=-1)
--@1:'False'(Type=Boolean)
--@2:'1'(Type=Int32)
--@3:'1/28/2008 12:00:00 AM'(Type=DateTime2)
--于2015年3月10日上午11:18:47+05:30执行
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
--在131毫秒内完成,结果为:SqlDataReader
2015年3月10日上午11:18:48+05:30提交的交易
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
2015年3月10日11:18:48 AM+05:30的关闭连接查询1、2和3都是一次性查询,每个AppDomain只发生一次以“初始化”实体框架,如果您运行两次查询,您将只看到查询4第二次运行。好的,这是一个很好的观点,谢谢
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES (@0, @1, @2, @3)
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()