gpt4 book ai didi

c# - 将 Linq 查询与 Entity Framework 一起使用时引发异常

转载 作者:行者123 更新时间:2023-11-30 17:20:41 25 4
gpt4 key购买 nike

我从这个问题中删除了大量文本,因为我觉得它需要更简洁。 - 塞尔格

这就是我想要做的。用户选择一个州,然后组合框加载该州的城市,然后当用户选择一个城市时,列表框加载该城市的所有项目。

当运行应该将项目加载到 ComboBox 的方法时,我收到此错误:

Exception has been thrown by the target of an invocation. Inner Exception is: "{"Specified cast is not valid."}"valid."}"

这是导致异常的方法:

private void LoadProjectsToListBox(long idCity)
{
ProjectRepository projectRepo = new ProjectRepository();

//This line causes the error.
var projects = projectRepo.FindAllProjects().Where(c => c.IDCity == 1).ToList();
}

在 Linq 查询中,您会看到我正在与硬编码数字进行比较。 1,是具有项目的城市的有效 ID,因此它应该可以工作。仅当我为 Linq 查询提供具有项目的城市 ID 时才会引发异常。因此,当查询返回结果时,似乎会引发错误。

下面是我用来生成 Project 和 City 表的 SQL 语句:

create table City
(
ID integer primary key autoincrement,
Name string,
IDState integer references State(ID)
);

create table Project
(
ID integer primary key autoincrement,
Name string,
StartDate text,
IDManager integer references Manager(ID),
IDCity integer references City(ID),
IDDepartment integer references Department(ID),
ContactNumber string,
Description string
);

令我感到奇怪的是,使用完全相同的模式和访问代码 来显示部门列表(只是我数据库中的另一个表)一切都按预期进行。例如,这是我现在加载部门的方式,只是为了测试:

private void LoadProjectsToListBox(long idCity)
{
ProjectRepository projectRepo = new ProjectRepository();
DepartmentRepository departmentRepo = new DepartmentRepository();

//Doesn't work - raises exception.
var projects = projectRepo.FindAllProjects().Where(c => c.IDCity == 1).ToList();

//Works exactly as expected.
var deps = departmentRepo.FindAllDepartments().Where(c => c.IDParentDepartment == 7).ToList();

lstProjects.Items.Clear();
foreach (var item in deps)
{
lstProjects.Items.Add(item.Name);
}
}

编辑:

FindAllDepartments()、FindAllCities()、FindAllProjects() 方法本质上是相同的。

DocumentsDBEntities db = new DocumentsDBEntities();

public IQueryable<Project> FindAllProjects()
{
return db.Projects;
}

public IQueryable<City> FindAllCities()
{
return db.Cities;
}

public IQueryable<Department> FindAllDepartments()
{
return db.Departments;
}

如前所述,部门获取工作;项目获取导致异常。

编辑 3:

我修好了!问题在于在项目表中使用“文本”数据类型。如果我将该列的数据类型从“文本”更改为“字符串”,它就可以完美运行。谁能告诉我为什么?

最佳答案

上周我遇到了完全相同的问题!在我的例子中,问题是我拉到 .dbml 文件的一些表有不同的数据库连接(测试与生产),即使表(概念上)相同,也无法转换表将“db1.table1”键入“db2.table1”。我不知道这是否是您问题的根源,但我希望这能以某种方式提供帮助。确保我的所有表都来自完全相同的数据库连接是我解决问题的方法。

关于c# - 将 Linq 查询与 Entity Framework 一起使用时引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com