实体框架插入相同数据的多个副本

时间:2015-02-16 21:49:23

标签: asp.net sql-server entity-framework

我遇到了一个我无法弄清楚的实体框架和SQL Server的奇怪问题。

我正在ASP.NET MVC 5中构建一个在线商店。

我将有关搜索的统计信息插入名为SearchResults的表中 - 它具有以下结构:

[SearchID] [int] IDENTITY(1,1) NOT NULL,
[SearchTerm] [varchar](5000) NULL,
[SearchDate] [datetime] NULL,
[Results] [int] NULL

我只是在控制器的“搜索”操作中使用此C#代码执行简单的EF插入,该搜索将使用搜索词发布:

var s = new SearchResult() { SearchTerm = search, SearchDate = DateTime.Now, Results = results };
            db.SearchResults.Add(s);
            db.SaveChanges();

结果是一个int,其中包含搜索找到的产品数。

每当我进行搜索时,相同的搜索会恰好插入3次,每次插入的时间略有不同。奇怪的是,它偶尔会插入一个条目(如预期的那样)。我无法弄清楚它为什么会这样做。

我运行了一条SQL跟踪,当它插入3时,只有一次调用该数据库。这就是追踪中的内容:

exec sp_executesql N'INSERT [dbo].[SearchResults]([SearchTerm],[SearchDate], [Results])
VALUES (@0, @1, @2)
SELECT [SearchID]
FROM [dbo].[SearchResults]
WHERE @@ROWCOUNT > 0 AND [SearchID] = scope_identity()',N'@0 varchar(5000),@1 datetime2(7),@2 int',@0='dew',@1='2015-02-16     16:32:53.4649185',@2=2

奇怪的部分是插入中显示的日期时间是第三个插入的值。

我完全不知道为什么会这样。我已经尝试了所有我能想到的东西,但我仍然会在插入时重复。

1 个答案:

答案 0 :(得分:2)

也许你正在查看错误的代码。 如果您记录或调试了对控制器的调用,您发布的第一段代码会执行多少次?