1

这是我见过的最烦人的问题。

我有一个带有 5 个不同列的 Cars 表。还有一个部门表。这是我的课:

[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,所以它当然是无效的。这是视觉工作室中的错误吗?

4

5 回答 5

2

我不得不删除 public List CarList { get; 放; } 从部门。我不知道为什么这解决了问题,但确实如此。

于 2013-10-04T18:08:23.163 回答
0

你应该能够做到这一点:

[Column("ColumnNameInDB", TypeName="int")]
public int Id { get; set; }
于 2013-09-29T17:26:33.183 回答
0

我不确定您是否愿意这样做,但在实体框架中,当引用数据库中的表时,c# 代码将表名复数。因此,请尝试将您的表重命名为 Departments...(类似于 Frequencies for frequency..etc)这样,即使您在 C# 代码中的表名是部门,它也会引用正确的表 Departments 及其列。谢谢

于 2013-09-29T19:09:45.587 回答
0

@JohnC1,您提到您删除了“List CarList”并且它起作用了,原因可能是由于引用了另一个数据库表和列名。通过删除该行,您将不再自动访问通过外键链接到 Cars 表的数据。

如果您首先使用 DB 来构建您的 DB 模型,那么您很可能在数据库中拥有(或拥有)一个重复的外键或类似的东西。添加另一个表(首先是数据库)并且在某处复制或损坏外键后,我收到了同样的错误。删除密钥并重建 .EDMX DB 模型对我有用。

于 2015-01-01T07:15:00.307 回答
0

我也遇到了同样的错误,因为我犯了 DB 和模型类之间的数据类型不匹配的错误。

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);
        }

    }
}
于 2015-05-26T20:16:59.157 回答