无缘无故更改数据库中的列名.“无效的列名错误”
本文关键字:无效 错误 无缘无故 数据库 | 更新日期: 2023-09-27 18:33:10
这是我见过的最烦人的问题。
我有一个带有 5 个不同列的汽车表。此外,还有一个部门表。这是我的班级:
[Table("Cars")]
public class Cars
{
[Key] public int ID { get; set; }
public int Year { get; set; }
public int Department_id { get; set; }
public string Manufactor { get; set; }
public string Name { get; set; }
}
[Table("Department")]
public class Department
{
public int id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Cars> CarList { get; set; }
}
public class CarsContext : DbContext
{
public DbSet<Cars> CarSets { get; set; }
public DbSet<Department> DepartmentSets { get; set; }
}
这是我的控制器:
public class CarsController : Controller
{
//
// GET: /Cars/
public ActionResult index(int? id)
{
CarsContext _CarsContext = new CarsContext();
List<Cars> C = _CarsContext.CarSets.Where(Car => Car.Department_id == id).ToList();
return View(C);
}
}
我的索引视图
@model IEnumerable<ASPDemo1.Models.Cars>
@using ASPDemo1.Models;
@{
ViewBag.Title = "All Available Cars";
}
<div style="font-family:Arial">
<h2>All Available Cars</h2>
<ul>
@foreach (var C in Model)
{
<li>
@Html.ActionLink(C.Name + " - " + C.Year, "Details", new { id = C.ID })
</li>
}
</ul>
</div>
谁知道是什么原因,我从中得到了一个内心的例外。当我从类中删除Department_id代码时,这非常有效。但是,如果我定义一个Department_id,它会抛出一个内部异常,指出"无效的列名"Department_id1"。我不知道为什么,但它在列名中添加了 1,所以它当然是无效的。这是视觉工作室中的错误吗?
我不得不从部门中删除公共列表 CarList { get; set; }。我不知道为什么可以解决问题,但它确实解决了。
你应该能够做到这一点:
[Column("ColumnNameInDB", TypeName="int")]
public int Id { get; set; }
我不确定你是否愿意这样做,但在实体框架中,在引用数据库中的表时,C# 代码会将表名复数化。因此,请尝试将表重命名为"部门"...(类似频率的频率..等)这样,即使 C# 代码中的表名是 Department,它也会引用正确的表部门,从而引用其列。谢谢
>@JohnC1,您提到您删除了"列表CarList"并且它起作用了,原因可能是由于引用了另一个数据库表和列名称。通过删除该行,您将不再自动访问通过外键链接到 Cars 表的数据。
如果首先使用 DB 来构造数据库模型,则数据库中很可能具有(或具有)重复的外键或类似内容。添加另一个表(首先是数据库)并在某处重复或损坏外键后,我收到了相同的错误。删除密钥并重建 .EDMX 数据库模型对我有用。
我也得到了同样的错误,因为我犯了数据库和模型类之间数据类型不匹配的错误。
public string DepartmentID { get; set; } != int DepartmentID of table.
It worked when I fixed it.
Below is my example:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace Part10MVC.Models
{
[Table("tblDepartment")]
public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public List<Employee> Employees { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace Part10MVC.Models
{
[Table("tblEmployee")]
public class Employee
{
public int employeeID { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public string City { get; set; }
public int DepartmentID { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace Part10MVC.Models
{
public class EmployeeContext: DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Department> Departments { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Part10MVC.Models;
namespace Part10MVC.Controllers
{
public class DepartmentController : Controller
{
//
// GET: /Department/
public ActionResult showDepartment()
{
EmployeeContext ec = new EmployeeContext();
List<Department> departments =ec.Departments.ToList();
return View(departments);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Part10MVC.Models;
namespace Part10MVC.Controllers
{
public class EmployeeController : Controller
{
//
// GET: /Employee/
public ActionResult showEmployees(int id)
{
EmployeeContext ec = new EmployeeContext();
List<Employee> liEmp = ec.Employees.Where(x=>x.DepartmentID==id).ToList();
return View(liEmp);
}
}
}