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