2009-04-23 5 views
2

私はlinqを初めて使用しています。私は更新ステートメントを作成しようとしています。linqにリレーションシップを挿入する正しい方法ですか?

私は2つのテーブルtblProjectとtblPageを持っています。 2つはtblPageの外部キーを介してリンクされています。

tblPageでこれを行を作成しようとしたときだから、INQクエリをi番目のは、私が知りたいのは何

public void CreatePage(int projectId, string pageName, DateTime createdDate, int createdBy, DateTime updatedDate, int updatedBy) 
    { 
     using (EverythingEngineEntities db = new EverythingEngineEntities()) 
     { 
      Page page = new Page(); 
      page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId); 
      page.LastUpdatedBy = updatedBy; 
      page.LastUpdatedDate = updatedDate; 
      page.CreatedBy = createdBy; 
      page.CreatedDate = createdDate; 
      page.PageName = pageName; 
     } 
    } 

を持っている、これはエンティティへのLINQを経由して行を挿入するのが正しい方法です。

申し訳

これのどれもが理にかなっていない場合:)

編集:

このラインはあなたがほぼ完了している正しい方法

page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId); 

答えて

3

であれば、私が興味を持っparticularyよ...あなたは実際にそれを挿入する必要があります(あなたはそれを作成しました、これはステップ1です)。

db.Pages.InsertOnSubmit(page); 
db.SubmitChanges(); 

私はそれがSQL構文にLINQを実現するのです...しかし、EFはかなり近いです:

コードが何かのようなものです。

EDIT:ところで、私はあなたが何かをやっている場合は、サーバーをヒットするを持っていないことを言及するのを忘れ:私はそれが

db.Pages.Add(page); 

EDIT2だEFのために...近かったです上記のように簡単です。私はあなたがEFでこのような何かを行うことができますかなり確信している:

page.Project.ProjectID = projectID; 

だからあなたはそれを再挿入するために、「db.ProjectSet.Single」をダウンロードする必要はありません。

+0

page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId); 


を置き換えることができます。Sを –

0

私はあなたの方法は正しいと思うが、あなたの方法は余分な呼び出しを作成します。

あなたは申し訳ありませんが、ちょうど私が緩みているし、それをコード追加していないthatsの

page.ProjectReference.EntityKey = new EntityKey("EverythingEngineEntities.Project", "ProjectID", projectId); 

Read this

関連する問題