1

SQL Compact 4.0 とエンティティ フレームワーク 4 を使用する単純なコンソール アプリがあります。データベースには、 (StoreGeneratedPattern: Identity, Type: Int32)(Type: string)(StoreGeneratedPattern: Computed, ConcurrencyMode:)Section の 3 つの列を持つ単一のテーブルがあります。固定、タイプ: バイナリ、MaxLength: 8)。TimeStamp 列は、実際には SQL Compact の rowversion 型です。Id Title TimeStamp

メインに次のコードがあります。

Section section = new Section();
section.Title = "Hello";

using (Entities1 context = new Entities1())
{
    context.Sections.AddObject(section);                
    context.SaveChanges();

    section.Title = "Changed";
    context.SaveChanges();
}

最初の SaveChanges() メソッドの後で TimeStamp 列がデータベースから更新されないため、このコードは同時実行例外をスローします。SQLServer2008 では問題なく動作することに注意してください。

これはコンパクトのバグですか、それとも何か不足していますか?

ありがとう、

ダレン

4

3 に答える 3

0

おそらく: context.Refresh(System.Data.Objects.RefreshMode.ClientWins, section); 最初の SaveChanges の後

于 2011-07-11T19:06:21.863 に答える
0

問題が見つかりました。StoreGeneratedPattern のプロパティが基になる xml ファイルに書き込まれていない edmx デザイナーのバグであることが判明しました。これは CSDL 部分にのみ保存され、SSDL 部分には保存されませ んそのブログでは、VS2010 SP1 で修正されたと言われていますが、私はそのバージョンを持っていますが、私のバージョンでは修正されていません。

xml ファイルに手動で入力すると、問題が解決しました。残念ながら、その後の変更で再びクリアされます。

ダレン

于 2011-07-12T23:45:42.437 に答える
-1

SQL CE と組み合わせた EF ではサポートされていない機能のように思えます。多分これはもう少し洞察を与えるでしょう:

EF / SQL CE / 自動生成された主キー

Rowversion 列は SQL CE で更新できません - これは、SaveChanges 時に更新しようとする EF と競合する可能性があります。

しかし、これはすべてを言います:

Lexis、あなたが話している 4.1.1 の既知の問題は、Identity または Rowversion 列を持つテーブルで DML 操作を実行しようとした場合にのみ問題を引き起こします。Select ステートメントに関しては、問題はありません。すべてが機能するはずです。アプリケーションに SQLCE に対する DML ステートメントが必要な場合は、スキーマに Identity 列と Rowerversion 列を含めないでください。残りはすべて正常に機能し、Entity Framework がデータを追加します。この後も問題が発生する場合はお知らせください。喜んでお手伝いさせていただきます。よろしくラヴィ・タンドン。

投稿のコメントの下のどこかにあります。DML は Data Manipulation Language (挿入/更新/削除) を表します。

于 2011-07-11T19:20:08.967 に答える