2017-08-25 9 views
0

私のアプリケーションでEntity Framework Code FirstとSQL Serverを使用しています。 私のコードの1つの場所で、私は単にデータベースにデータを挿入しようとしました。 私は単にによって設定された私のオブジェクトに追加SQL Server Entity Frameworkの挿入が機能しない

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プロファイラを使用して見ました

、その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 

アイデンティティであるがインクリメントされましたが、何の行が挿入されませんでした。 私はこのSQLコマンドをMicrosoft SQL Management Studioから手動で呼び出しましたが、すべてが正常にDbにコミットされましたが、Idは予想以上の大きさでした。

もちろん、コードの他の部分に他のエンティティを挿入することに問題はありません。

誰もがこのような問題を以前見たことがある場合は、この問題の原因を教えてください。

すべてのヘルプは非常に高く評価されるだろう:)

EDIT:

  • をCarIdは、外部キーであり、この表の唯一の依存関係です。
  • DrivingStatisticTypeは列挙型です。
  • EntityFrameworkは
  • Entity Frameworkのは、それらの行を再挿入するをしようとしていない任意の例外をスローしませんでした。
  • 誰が、なぜ、いくつかの状況でそれを知っている場合、私はそれが

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

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

    を変更することで動作するようにします。しかし、これらのインサート

+0

IDの大きな増加は、データベース内のトランザクションまたはデッドロックの問題のヒントになる可能性があります。 Management Studioを使用して成功した場合、dbもプロファイルしましたか?要求が最初の試行で成功したのですか、または再試行がありましたか? Entity FrameworkまたはSQLクライアントが例外をスローしましたか? – Patrick

+0

dbサーバーのイベントビューアーを調べましたか?多分あなたはそこにいくつかのヒントを見つけることができます。 – Patrick

+0

コレクションではなくレコードを1つだけ挿入しようとしましたが、 'Car'と' DrivingStatisicType'のプロパティに値が設定されて挿入されていますか? – Scrobi

答えて

0

についてSQL Serverのログには何もありません複数の行を追加して一緒にコミットすることはできません。教えてください。 私はここで何が起こったのか本当に不思議です。

+0

foreachを必要としないように_objectSet.AddRange(data)を試してください。 – borisdj

関連する問題