2011-01-07 87 views
1

我想盡可能快地學習LINQ到sql /對象。我有一個數據庫與一個類別表和一個子類別表。類別可以有許多子類別。作爲一個教訓,我正在獲得一個類別列表。用戶從顯示的類別中輸入主鍵,然後我打開顯示所有子類別。LINQ與實體框架 - 基本問題

顯示類別很容易...但實體框架已從子類別中刪除外鍵!我期望在子類別表中看到一個類別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(); 
} 

該?? ??是我陷入困境的地方......我如何做到這一點?

回答

1

試試這個:

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

屬性categorycategory_id的名稱可以是不同的。您可以在EF設計師的模型中查看實際名稱。如果缺少category屬性,請確保在類別表和子類別表之間有外鍵關係。

您還想更改EF設計器中實體和特性的默認名稱。例如,對子集合使用複數名稱。例如,使用db.SubCategories而不是db.sub_category。這使得它更具可讀性。

+0

謝謝史蒂文!這工作。太棒了。我試圖讓這些名字多元化。我必須手動修改實體嗎?如果是這樣,如果我需要稍後從數據庫中刷新模型,那麼我需要再次手動重命名它們? – Craig 2011-01-07 08:38:55