2017-08-25 38 views
0

我在我的應用程序中使用實體框架代碼優先和SQL Server。 在我的代碼的一個地方,我試圖簡單地插入數據到數據庫中。 我已經有了對象的集合像SQL Server實體框架插入不工作

public class DrivingStatistic 
{ 
    public int Id { get; set; } 
    public int CarId { get; set; } 
    public virtual Car Car { get; set; } 
    public DateTime DateFrom { get; set; } 
    public DateTime DateTo { get; set; } 

    public BLL.Consts.DrivingStatisticType Type { get; set; } 
    public double Value { get; set; } 
} 

我把它添加到我的設置目的在於通過簡單:

foreach(var entity in data) 
    _objectSet.Add(entity); 
unitOfWork.SaveChanges(); 

一切正常,在我的本地數據庫,但在遠程服務器上,沒有任何反應。幾乎沒有。

我用SQL Server Profiler中看到,該INSERT命令創建並正確執行,這裏是我的表

exec sp_executesql N'INSERT [dbo].[DrivingStatistics]([CarId], [DateFrom], 
    [DateTo], [Type], [Value]) 
    VALUES (@0, @1, @2, @3, @4) 
    SELECT [Id] 
    FROM [dbo].[DrivingStatistics] 
    WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()',N'@0 int,@1 
    datetime2(7),@2 datetime2(7),@3 int,@4 float',@0=1000,@1='2017-08-25 
    07:00:00',@2='2017-08-25 08:00:00',@3=4,@4=0 

身份遞增,但插入任何行。 我通過Microsoft SQL Management Studio手動調用了此SQL命令,並且所有事情都成功提交給了Db,但是Id的數量比預期的要多,我知道這是Identity以前增加的數字。

當然,在代碼的其他部分插入其他實體沒有問題。

如果有人看到過此類問題,請告訴我可能會導致此問題的原因。

任何幫助將是非常讚賞:)

編輯:

  • CarId是外鍵,它是該表中的唯一一個依賴。
  • DrivingStatisticType是一個枚舉。
  • EntityFramework沒有發現任何異常
  • 實體框架是沒有試圖重新插入這些行。
  • 沒有什麼在SQL Server日誌那些插入
+0

身份的大增量可能暗示數據庫中的事務或死鎖問題。當通過Management Studio成功完成時,你是否也在分析數據庫?請求是在第一次嘗試中成功還是有重試?實體框架或SQL客戶端是否拋出任何異常? – Patrick

+0

你看過數據庫服務器的事件查看器嗎?也許你可以在那裏找到一些提示。 – Patrick

+0

您是否嘗試過插入一條記錄而不是集合,並且是「Car」和「DrivingStatisicType」屬性的填充和插入? – Scrobi

回答

0

我讓它通過改變

foreach(var entity in data) 
    _objectSet.Add(entity); 
unitOfWork.SaveChanges(); 

合作,

foreach(var entity in data) 
{ 
    _objectSet.Add(entity); 
    unitOfWork.SaveChanges(); 
} 

但是如果有誰知道爲什麼在某些情況下它無法添加多行並將它們一起提交,請告訴我。 我真的很好奇這裏正在發生什麼。

+0

用_objectSet.AddRange(數據)嘗試,所以你不需要foreach。 – borisdj