2012-02-13 10 views
1

私はMySqlの上に、城のアクティブなレコードを使用する非常に単純なasp.net mvc Webアプリケーションを持っています。キャッスルアクティブレコードでは、セッションスコープを終了する必要があるときにCreateAndFlushを使用する必要があるのはなぜですか?

アプリケーションのユーザーは、エンティティのいずれかのプライマリキーを手動で定義する必要があります(デフォルトはオートナンバーでした)。私は考えていませんが、私は[PrimaryKey]から[PrimaryKey (PrimaryKeyType.Assigned)]に単純に変更し、データベーススキーマを修正します(これは問題のポイントではありませんが、問題のポイントではありません)。

OnBeginRequestでリクエストごとにセッションスコープを作成し、hereと同じコードを使用してOnEndRequestを作成しても、新しいエンティティは.Create()メソッドを呼び出すとデータベースに永続化されることはありません。私が[Primary Key]属性を変更する前に、同じコードが正常に機能しました。

Create()の代わりに.CreateAndFlush()を呼び出すと、エンティティはdbに永続化されます。私は、セッションスコープが終了すると、Create()の変更が維持されると考えました。なぜ彼らは...私はこれがどう動くべきか誤解していますか?

答えて

0

。私は、新しい主キーが存在しないことを確認するコードを書いたことを忘れていました。もちろん、そのコードには独自のセッションスコープが必要でした。すべての作業が完了したらすぐに、.createを呼び出すとオブジェクトがDBに保持されます。このことから学んだ

つの教訓:

  1. 次の時間がSOに私のコードを投稿してください。
  2. 深夜のコードは、私がそうでなければ理にかなって...
1

生成されたキーの場合、ActiveRecordは0/NULL/{0000-0000-0000-0000} /などを認識します。 empytの値であり、オブジェクトは一時的なものであり、作成する必要があります。 PrimaryKeyがAssigenedされているかどうかはわかりません。しかし、ActiveRecordに空の値を伝えるには、PrimaryKeyAttributeに次の名前付きパラメータを使用します。 pebcakであることが判明

[PrimaryKey(PrimaryKeyType.Assigned, UnsavedValue="")] 

Greeetings Juy Juka

+0

ああ、忘れることが変更しないでください。しかし、私の主キーは、オブジェクトの新しいインスタンスのデフォルト値としてゼロを持つIntです。 ARは0が空であることを知っていますか?私は '[PrimaryKey(PrimaryKeyType.Assigned、UnsavedValue =" 0 ")]'を試みましたが、違いはありませんでした。 Thオブジェクトはまだdbに保存されません。 – simon

+0

私は自分のコードで間違いを犯しました。保存されていない値についての情報は+1、非常に便利でした。 – simon

関連する問題