2009-05-05 24 views
1

私はこれらのテーブルがあるとします。オブジェクトの外部キー値をLINQでエンティティに更新するにはどうすればよいですか?

Fruits 
- FruitID  INT PK 
- FruitName  NVARCHAR(30) 
- FruitStatusID INT FK: Statuses 

Statuses 
- StatusID  INT PK 
- StatusName NVARCHAR(30) 

どのように私はこのような状況では、データベースに果物の名前とその状態の両方を更新するか?:

  1. アップデート以前から来た果物の作品L2Eコール
  2. はFruitID(つまり、私が開始するように手で完全なフルーツオブジェクトを持っていない)

VBに対応する整数を与えまたはC#がうまくいけば、ありがとう!

答えて

2

This worksが、私が望んでいたものではありません。

int StatusID = 4; // Some ID 
Fruit.FruidIDReference.EntityKey = 
    New EntityKey("MyEntities.Statuses", "StatusID", StatusID) 

きっと私が作る場合は実行時例外を導入し、ハードコーディング文字列を(必要としないこれを行うにクリーンな方法があります打ち間違え)。

+1

私だけも実現:あなたはハードコード彼らにはありませんので、あなたは、既存のEntityKey値から最初の2つのパラメータを構築することができます:新規のEntityKey(Fruit.FruitIDReference.EntityKey.EntityContainerName + "+" Fruit.FruitIDReference.EntityKey.EntitySetName、Fruit.FruitIDReference.EntityKey.EntityKeyValues [0] .Key、0) –

+0

私はそれを試してみましょう。フォローアップのためにありがとう –

0

フルーツオブジェクトが別のメソッドに渡された場合、次のことができます。

  1. は、編集内容を確認します)(

  2. をフルーツと一緒にコンテキストオブジェクトへの参照を渡すと、SaveChangesメソッドを呼び出します下位レベルの方法でフルーツオブジェクトとは、(あなたがDBの呼び出しを不要に避けたい場合は、それが変更されているかどうかを確認することができます。)呼び出し元のメソッドでのSaveChanges()を呼び出し

コード:

//Change the name 
FruitEntities fe = new FruitEntities(); 
Fruit f = fe.Friuts.First(); 
f.FruitName = "NewName"; 
fe.SaveChanges(); 

//Get a fruit by ID and change the status 
//Statuses will need to be included as an Entity in your model with an association to Fruits 
int Id = 2; 
int newStatusID = 0; 
FruitEntities fe = new FruitEntities(); 
Fruit f = (from x in fe.Fruits 
      where x.FruitID == Id 
      select x).First(); 
Status s = (from y in fe.Statuses 
      where y.StatusID = newStatusID 
      select y).First(); 
f.Status = s; 
fe.SaveChanges(); 
+0

何もハードコードされていないのでこれはいいです文字列では、ステータスをロードするにはデータベースへのラウンドトリップが必要です。それを回避する方法はありますか? –

+0

Statusesは頻繁に変更されないenumになるため、Statusesコレクションのコピーをメモリに保存し(必要な場合はWebのアプリケーション状態)、それらを取得できます。 –

+0

もう1つのヒント:これはたくさんのコードです。コードを整理しておくために、拡張メソッドなどをヘルパーとして作成することを検討してください。 –

関連する問題