【问题标题】:LINQ with Entity Framework - basic questionLINQ with Entity Framework - 基本问题
【发布时间】:2011-01-07 16:31:54
【问题描述】:

我正在尝试尽快学习 linq to sql/objects。我有一个带有 Category 表和 sub_category 表的数据库。一个类别可以有许多子类别。作为一个教训,我得到了一个类别列表。用户从显示的类别中输入主键,然后我不想显示所有子类别。

显示类别很容易...但是 Entity Framework 已从子类别中删除了外键!我希望在子类别表中看到一个类别 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 子句?

【问题讨论】:

    标签: c# .net linq entity-framework


    【解决方案1】:

    试试这个:

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

    属性category 和category_id 的名称可以不同。您可以在 EF 设计器中查看您的模型的实际名称。如果缺少 category 属性,请确保类别表和子类别表之间存在外键关系。

    您还想在 EF 设计器中更改实体和属性的默认名称。例如,为子集合使用复数名称。例如,使用db.SubCategories 而不是db.sub_category。这使它更具可读性。

    【讨论】:

    • 谢谢史蒂文!那行得通。极好的。我正在尝试使名称复数。我必须手动修改实体吗?如果是这样,如果我以后需要从数据库中刷新模型,我需要再次手动重命名它们吗?
    • 您需要手动修改实体及其关系。对数据库的更改仍然有点工作(因为它一直在软件开发中)。在进行数据库更改后,防止删除实体以读取它们。这将是很多工作,因为您必须再次重命名所有内容。这就是你想要保持代码尽可能干净时要付出的代价;-)
    • 感谢 Steven - 外键都建立得很好,所以这只是我必须在我的 linq 实体中更改的名称。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    相关资源
    最近更新 更多