2011-01-09 17 views
0

sqlserverデータベースでエンティティフレームワークを使用します。
EntityObjectで表されるテーブルには、別のテーブルへの外部キーが含まれています。たとえば
:(一部のfiledsないそれらのすべてに、参加)エンティティオブジェクトと外部キー

public Article GetArticleById(int id) 
{ 
     var article = Articlerctx.Articles.Where(o=>o.ArticleID==id).FirstOrDefault();   
     return article; 
} 

しかし、私は他のテーブルからもフィールドを返すようにしたい:

ArticleID|ArticleTitle|ArticleBody|CategoryID (key to another table) 

私はEnityobjectを戻すには、このクエリを使用します。

その目的のために新しいクラス(フィールドに対応するクラス)を定義する必要がありますか?

、それが好き返す:

public ArticleFull GetArticleById(int id) 
{ 
    var ret = (from article in Articlerctx.Articles 
        select new ArticleFull 
        { 
        ArticleID = article.ArticleID, 
        Title = article.Title, 
        CategoryTitle = article.Articles_Categories.Title, 
        }).Where(o => o.ArticleID == id).FirstOrDefault(); 
    return ret; 
} 

それはすべてのフィールドに新しいクラスをdeineために夢中になるだろう...

答えて

0

.Include() extensionを使用してみてください。

+0

これはうまくいきますが、必要な1つのフィールドだけにテーブル全体を含めるだけで十分ですか?それとも、新しいクラスを選択して新しいクラスを使用して同じです... – asker

0

私が正しく理解していれば、EFでlazy loadingを有効にする必要があります(デフォルトではtrueです)。その後、@naspinskiで答える

あなたが遅延読み込みのオプションを使用する場合は、遅延読み込み()オプションを使用したくない場合は、のような

  EntityContext Context = new EntityContext(); 

      Context.ContextOptions.LazyLoadingEnabled = True;//by default it is true 

      var article = Articlerctx.Articles.Where(o=>o.ArticleID==id).FirstOrDefault();   

      Article.Category.Id or any other field from category. 

を参照テーブルの値にアクセスすることができますが動作します。

+0

コンテキスト内にEnableLzyLoadingプロパティがありません...とにかくあなたが他のテーブルを含まない場合は動作しません – asker

+0

Thr is..i code ..これはあなたの目的に役立ちます.. – paragy