2011-01-07 7 views
1

私はできるだけ早くlinq to sql/objectsを学習しようとしています。私はCategoryテーブルとsub_categoryテーブルを持つデータベースを持っています。カテゴリには、複数のサブカテゴリを持つことができます。レッスンとして、カテゴリのリストを取得しています。ユーザーは、表示されたカテゴリから主キーを入力し、すべてのサブカテゴリを表示します。Entity Frameworkを使用したLINQ - 基本的な質問

カテゴリを表示するのは簡単でした...しかし、Entity Frameworkはサブキーから外部キーを削除しました!サブカテゴリーテーブルにカテゴリIDが表示されます(SQLサーバーデータベースモデルにあるように)。

代わりに、私はいくつかのCategoryReferenceプロパティを持っています...どうすればこれを管理できますか?

static void Main(string[] args) 
{ 
    BudgieMoneyEntities db = new BudgieMoneyEntities(); 

    var categories = (
     from category in db.categories 
     select category).ToList(); 

    Console.ForegroundColor = ConsoleColor.Green; 
    Console.WriteLine("Categories:"); 
    Console.ForegroundColor = ConsoleColor.White; 

    foreach (category cat in categories) 
    { 
     Console.WriteLine(string.Format("{0:00} {1}", cat.category_id, 
      cat.description)); 
    } 

    int categoryId = WaitForKey(); 

    var subcategories = (
     from subcategory in db.sub_category 
     where subcategory ?? ? 
     select subcategory).ToList(); 
} 

??私が立ち往生している場所です...私はどのようにこれをどこで行うのですか?プロパティcategorycategory_idの名前が異なる場合があります

var subcategories = (
    from subcategory in db.sub_category 
    where subcategory.category.category_id == categoryId 
    select subcategory).ToList(); 

答えて

1

はこれを試してみてください。実際の名前が何であるかは、EFデザイナーでモデルを見ることができます。 categoryプロパティがない場合は、カテゴリテーブルとサブカテゴリテーブルの間に外部キー関係があることを確認してください。

また、EFデザイナーのエンティティとプロパティのデフォルト名を変更する必要があります。たとえば、サブコレクションには複数の名前を使用します。たとえば、db.sub_categoryの代わりにdb.SubCategoriesを使用します。それにより、はるかに読みやすくなります。

+0

ありがとうSteven!それはうまくいった。素晴らしい。名前を複数にしようとしています。エンティティを手動で変更する必要がありますか?もしそうなら、後でデータベースからモデルをリフレッシュする必要がある場合は、手動で名前を変更する必要があります。 – Craig

+0

エンティティとその関係を手動で変更する必要があります。データベースへの変更はまだ(ソフトウェア開発では常にあったように)ちょっとした作業です。エンティティを削除して、データベースを変更した後にそれらを読み取らないようにします。それは、すべての名前をもう一度変更する必要があるので、多くの作業になります。それはできるだけあなたのコードをきれいに保つために支払う価格です – Steven

+0

おかげでスティーブン - 外国キーはすべてうまく確立されていますので、私は私のlinqエンティティで変更する必要があります。助けてくれてありがとう。 – Craig