C# 具有实体框架的LINQ-基本问题

C# 具有实体框架的LINQ-基本问题,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,我正在尽可能快地学习linq到sql/对象。我有一个带有类别表和子类别表的数据库。一个类别可以有许多子类别。作为一个教训,我得到了一个类别列表。用户从显示的类别中输入主键,然后单击以显示所有子类别 显示类别很容易。。。但是实体框架已经从子类别中删除了外键!我希望在子类别表中看到类别Id(就像SQL server数据库模型中一样) 相反,我有一些CategoryReference属性。。。我如何管理这个 static void Main(string[] args) { BudgieMon

我正在尽可能快地学习linq到sql/对象。我有一个带有类别表和子类别表的数据库。一个类别可以有许多子类别。作为一个教训,我得到了一个类别列表。用户从显示的类别中输入主键,然后单击以显示所有子类别

显示类别很容易。。。但是实体框架已经从子类别中删除了外键!我希望在子类别表中看到类别Id(就像SQL server数据库模型中一样)

相反,我有一些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();
}
这个??就是我被卡住的地方。。。如何使用where子句?

尝试以下操作:

var subcategories = (
    from subcategory in db.sub_category
    where subcategory.category.category_id == categoryId
    select subcategory).ToList();
属性
category
category\u id
的名称可以不同。您可以在EF designer中查看模型的实际名称。如果缺少
category
属性,请确保categories表和subcategories表之间存在外键关系

您还需要更改EF设计器中实体和属性的默认名称。例如,对子集合使用复数名称。例如,使用
db.SubCategories
而不是
db.sub\u categories
。这使它更具可读性。

尝试以下方法:

var subcategories = (
    from subcategory in db.sub_category
    where subcategory.category.category_id == categoryId
    select subcategory).ToList();
属性
category
category\u id
的名称可以不同。您可以在EF designer中查看模型的实际名称。如果缺少
category
属性,请确保categories表和subcategories表之间存在外键关系


您还需要更改EF设计器中实体和属性的默认名称。例如,对子集合使用复数名称。例如,使用
db.SubCategories
而不是
db.sub\u categories
。这使它更具可读性。

谢谢史蒂文!成功了。好极了我正试图使名字多元化。我必须手动修改实体吗?如果是这样,如果我以后需要从数据库刷新模型,我需要再次手动重命名它们?您需要手动修改实体及其关系。对数据库的更改仍然需要一些工作(在软件开发中一直如此)。禁止删除实体以在数据库更改后读取它们。这将是一个很大的工作,因为你必须重新命名一切。这就是当您希望保持代码尽可能干净时要付出的代价;-)谢谢Steven-外键都建立得很好,所以这只是我必须在linq实体中更改的名称。谢谢你的帮助。谢谢史蒂文!成功了。好极了我正试图使名字多元化。我必须手动修改实体吗?如果是这样,如果我以后需要从数据库刷新模型,我需要再次手动重命名它们?您需要手动修改实体及其关系。对数据库的更改仍然需要一些工作(在软件开发中一直如此)。禁止删除实体以在数据库更改后读取它们。这将是一个很大的工作,因为你必须重新命名一切。这就是当您希望保持代码尽可能干净时要付出的代价;-)谢谢Steven-外键都建立得很好,所以这只是我必须在linq实体中更改的名称。谢谢你的帮助。