データベースのアップロード スクリプトに問題があります。基本的には、バックアップ ソースからすべてのエンティティをデータベースに追加するだけです。
ただし、新しいデータベースの一部のフィールドは古いデータ ソースには存在しないため、デフォルト値を割り当てます。例については、以下のスクリーンショットを参照してください。文字列プロパティCCP1_description
(およびその下の同様の名前の説明) は、"Enter description here."
ただし、エンティティを保存すると、説明フィールドを NULL にすることはできないという例外が発生します。明らかにそうではありません。
コード + 例外のスクリーンショットを参照してください
これは私のデータベース作成スクリプトのスニペットです。列がどのように設定されているかを示しています。
...
[CCP1_description] nvarchar(max) NOT NULL,
[CCP2_description] nvarchar(max) NOT NULL,
[EP1_description] nvarchar(max) NOT NULL,
[EP2_description] nvarchar(max) NOT NULL,
[EP3_description] nvarchar(max) NOT NULL,
[EP4_description] nvarchar(max) NOT NULL,
[EP5_description] nvarchar(max) NOT NULL,
...
デバッグ時に変数を確認するtemp
と、説明フィールドの内容がはっきりとわかります (すべてが""Enter description here.
本来あるべき姿です。
多くのことがこの例外を引き起こす可能性があることを知っています。しかし、この問題の根本的な原因はわかりません。誰かがこれに光を当てることができますか? この例外がスローされる理由がわかりません...
同じエラーで多くの未解決の質問が見つかりましたが、私のフィールドはデータベースで生成されておらず、PK または IDENTITY フィールドでもないため、これは別の状況だと思います。エンティティが構築されているときは空ではなく、追加されているオブジェクトには実際に正しい値があります。
アップデート
最初の 83 個のエンティティが正しく追加されていることに気付きました。コードが実行される 84 回目に例外がスローされます (その後も何度も発生します。つまり、問題はおそらく別のプロパティ フィールド内にあります。
すべてのフィールドをチェックしnull
ましたが、データベースとエンティティ フレームワークで null 可能に設定されているフィールドに値のみが追加されています。
そして、説明フィールドで例外がスローされる理由が本当にわかりません。
更新 2
このアプリケーションは、サルバドール・ダリによってコーディングされたようです。
コードを手直ししましたが、今回はその行をコメントアウトしました.AddObject(temp);
。つまり、エンティティは作成されますが、db コンテキストには追加されません。呼び出しはdb.SaveChanges();
実際には冗長であり、何もしません。
またはそう私はしかし。結局のところ、私のエンティティはまだ追加されています。私はコード実行全体をステップ実行しましたが、 を除いて db コンテキストを使用することはありdb.SaveChanges();
ませんが、それでもすべてが追加されます。逆に、カウンターが 100 に達した後にのみエンティティの追加を開始した場合 (つまり、アイテム 100、101、102、... のみが保存され、残りはすべて追加されません)、他のエンティティを次のように追加し続けます。良い。
私にはまったく手がかりがありません。文字通りなし。詳細がわかり次第、投稿を更新します。
最終更新
回避策を見つけることができました(以下の私の回答を参照してください)。しかし、なぜこれが起こっているのか、私はまだ説明を探しています。誰かが私にこれを説明できるなら、私は彼らにこの質問への答えを与えます.