2009-05-20 4 views
0

私はレンタカーの予約エンジンを構築しています。linqからメモリに作成した後にエンティティを挿入する

私はCarおよびLocationオブジェクト(およびその後のFK CarID/LocationIDフィールド)を持つ予約l2sオブジェクトを持っています。

予約プロセスの最初の段階で、私はBooking()クラスを新しくしました。これはセッション内で後続のページに渡されます。

ユーザーが処理を続けると、CarIDとLocationIDプロパティが設定されますが、Bookingオブジェクトはデータベースに保持されていないため、たとえばBooking.Car.CarModelは参照できません。それでは、私がやっていることは、明示的に設定されて

Booking.Car = DB.Car.Where(x => x.id == Booking.CarID).Single(); 

など

それは予約を保存するための時間が来るとき、それはスロー:

An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.

だからだろう予約エンティティが新しくないと思っているようです。私が試してみて、私は明示的に(Booking.Car = NULL)を設定した値をゼロならば、それは別のエラーがスローされます。

An attempt was made to remove a relationship between a Car and a Booking. However, one of the relationship's foreign keys (Booking.CarID) cannot be set to null.

そして今、私は困惑...


決勝ソリューション

私がやったことは、予約を保存する直前だった(別のものを試した後)、現在のコンテキストからCarオブジェクトとLocationオブジェクトをリロードしました。正確には効率的ではありませんが、私はそうです。

+1

ちょっとした注意 - Where()からSingle()へ述語を移動すると、Booking.Car = DB.Car.Single(x => x.id == Booking.CarID); –

+0

ありがとう。 – ChadT

答えて

0

私はあなたのデータコンテキスト処理に問題があると確信しています。リクエストごとに1つ作成しますか?答えが「はい」の場合、問題はオブジェクトがさまざまなコンテキストに関連付けられていることです。データベースからフェッチするために使用したコンテキストからそれらを切り離し、それらを格納するために使用するコンテキストに再配置する必要があります。

+0

ここに何かがあるかもしれません。 CarオブジェクトとLocationオブジェクトは異なるコンテキストからロードされました。 – ChadT

関連する問題