Entity framework 为什么实体框架代码首先为单个插入打开关闭4个不同的数据库连接?

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),

我在EF code first场景的表中插入了一行,但在检查日志时,我可以看到4种不同的打开/关闭连接和相关活动

我认为,这是EF的默认行为

有人能告诉我更多关于这个的信息吗

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()