2011-01-07 196 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