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

时间:2015-10-03 06:02:03

标签: entity-framework

我在EF代码的第一个场景中在表中插入一行,但是当我查看日志时,我可以看到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年10月3日上午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'

- 执行时间为2015年10月3日上午11:18:45 +05:30

- 在12毫秒内完成,结果为:3 2015年10月3日上午11:18:45 +05:30

2。已于2015年10月3日上午11:18:46 +05:30

打开连接
 SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
    COUNT(1) AS [A1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
    WHERE [Extent1].[ContextKey] = @p__linq__0
)  AS [GroupBy1]

- p__linq__0:' DataModel.Migrations.Configuration' (Type = String,Size = 4000)

- 执行时间为2015年10月3日上午11:18:47 +05:30

- 在34 ms内完成,结果为:SqlDataReader 2015年10月3日上午11:18:47 +05:30

关闭连接

第3。已于2015年10月3日上午11:18:47 +05:30

打开连接
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年10月3日上午11:18:47 +05:30

- 在25毫秒内完成,结果为:SqlDataReader

2015年10月3日上午11:18:47 +05:30

关闭连接

4。已于2015年10月3日上午11:18:47 +05:30

打开连接

于2015年10月3日上午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()

- @ 0:' SampsonSan' (Type = String,Size = -1)

- @ 1:'错误' (Type = Boolean)

- @ 2:' 1' (Type = Int32)

- @ 3:' 1/28/2008 12:00:00 AM' (Type = DateTime2)

- 执行时间为2015年10月3日上午11:18:47 +05:30

- 在131毫秒内完成,结果为:SqlDataReader

承诺交易于2015年10月3日上午11:18:48 +05:30

2015年10月3日上午11:18:48 +05:30

关闭连接

0 个答案:

没有答案