【问题标题】:Invalid Column Name : SQL / ASP.NET无效的列名:SQL / ASP.NET
【发布时间】:2013-03-28 14:39:20
【问题描述】:

我很难调试一个特定的问题并且有几个问题。首先,这是发生了什么:

我有一个名为Employees 的相对简单的表,它有一个主键/身份Id。还有一个Username 列 - 这是我的aspnet_Users 表的GUID 外键,用于成员资格。最后,还有另一个外键Team_Id 指向另一个表Teams

我真正想做的就是提供选定员工的 ID 并将其传递给 DAL 中的一个方法,然后使用以下语句找到该员工:

var employee = entities.Employees.Where(emp => emp.Id == employeeId);  

一旦检索到员工,我想使用传递给同一方法的另一个值 - 所选团队的 ID - 来更新员工的 Team_Id 值(他们被分配到哪个团队),使用以下内容:

employee.First().Team_Id = teamId;
entities.SaveChanges();  

我得到了异常

列名无效:{Name}

这对我来说没有意义,因为 Employee 没有名称列。

说了这么多,我的问题是:

  1. 混淆可能来自哪里?我已经尝试想出一种逐步执行代码的方法,但似乎错误出现在查询本身的某个地方,所以我不确定如何跟踪查询本身的执行。

  2. 这可能与我生成的实体有关吗?我注意到当我输入 employee.First(). Name 时出现在 Intellisense 中。我对此感到非常困惑,因为正如我所提到的,employees 表中没有 Name 列。

【问题讨论】:

  • 你能展示你的员工等级吗?
  • 这不是一门课。它是数据库中的一个表。它有一个“Id”列 (int)、一个“Username”列 (GUID) 和一个“Team_Id”列 (int)。
  • 您有一个名为“名称”的列现在被删除了吗?
  • 不,我没有。自最初创建表以来没有更改任何内容。

标签: asp.net sql sql-server linq


【解决方案1】:

解决了这个问题。我刚刚删除了现有的实体框架模型并重新添加了它。

【讨论】:

  • 有时仅此而已 - 您始终可以手动修复问题,但只要您的模型不太复杂,旧的 kill-and-recreate 方法通常是最简单的。
【解决方案2】:

就查询而言,您始终可以使用 SQL Profiler 查看实际运行的脚本。无论如何,这是对生成的 SQL 进行故障排除的好方法。

对于您的财产,不知何故它确实进入了您的班级,因此您的数据模型认为它就在那里,无论出于何种原因。我会说只是转到您的数据模型(您没有提到这是 EF 还是 LINQ-to-SQL),您会在那里看到“名称”。只需将其删除,它就会将其从类和数据访问中删除。

【讨论】:

  • 它使用 EF。对于那个很抱歉。我将尝试删除 Name 属性,看看效果如何。
  • 取出我能找到的与 Name 属性相关的所有内容,现在我收到此错误:“概念类型“Model.Employee”中的成员数与上的成员数不匹配对象侧类型'CPM_Data_Layer.Employee'。确保成员数量相同。”我可以重新生成实体吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多