【问题标题】:SqlException: Invalid column name (Entity Framework)SqlException:列名无效(实体框架)
【发布时间】:2017-08-07 09:37:42
【问题描述】:

我尝试更新表格列,但失败了。这是我的控制器上的更新代码:

public ActionResult AddDoctorsAppointment(string Start, string End, string Title, int? idPatient)
{
    Appointment appointmentDoc = new Appointment()
    {
        Start_appointment = Start,
        End_appointment = End,
        Title = Title,
        Type_of_appointment = "Doctors",
        Patient_Id = idPatient
    };
    db.Appointments.Add(appointmentDoc);
    db.SaveChanges();
    return Json(new { Result = "Success", Message = "Saved Successfully" });
}

这里是约会模式

public partial class Appointment
{
    public int Id { get; set; }
    public string Start_appointment { get; set; }
    public string End_appointment { get; set; }
    public string Title { get; set; }
    public string Type_of_appointment { get; set; }
    public Nullable<int> Patient_Id { get; set; }

    public virtual Patient Patient { get; set; }
}

当我尝试更新时出现此错误:

我试图找到列名Patient_Id1,但我的项目中没有。

清理和重建没有帮助。我该如何解决这个问题?

【问题讨论】:

  • 我假设您使用的是 DB 优先方法。进入您的 .edmx 文件并找到 Appointment 类和 Patient 类的映射。在属性的某处,您将准确地看到哪些属性映射到哪些列,并且能够对其进行更新。
  • 当然,您在 EDMX 中存在映射问题(由数字后缀显示,EF 试图避免重复的外键)或同一个 PK 有 2 个不同的 FK(映射两次)。我认为您需要为Patient 类设置ICollection,然后从数据库更新模型。

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

如果首先是 DB,那么您应该通过将 Patient_Id 添加到表 Appointment 来更新 EDMX 文件,然后重新构建解决方案。

如果是 Code first,那么只需将此 db 字段添加到 Appointment 表然后运行它。

【讨论】:

    【解决方案2】:

    确保 db 列与您的 edmx 正确匹配。通常当您的 edmx 和数据库不同步时会发生此错误

    【讨论】:

      【解决方案3】:

      当我不小心创建了一个列名末尾有空格的表时,我发生了这种情况。我更新了模型,发现 EF 添加了下划线,这就是我发现错误的方式。我再次删除、更正并更新了模型。这就是这个错误开始的时候。

      在尝试了几乎所有操作后,我完全删除并重新创建了模型,清理了项目。一切。就这样,我又重新开始工作了!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-12
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 2012-08-24
        相关资源
        最近更新 更多