System.Data.SqlClient.SqlException:列名“Gender_id”无效

我正在学习使用 asp.net mvc 和实体框架进行 Web 应用程序开发。我有一个包含 3 个学生、性别和项目表的数据库。我遇到了这个问题。


错误在第 23 行。


列名“Genders_Id”无效。列名“Programs_Id”无效。


异常详细信息: System.Data.SqlClient.SqlException:列名“Genders_Id”无效。列名“Programs_Id”无效。


Source Error:



Line 21:         {

Line 22:             StudentsContext stdContext = new StudentsContext();

Line 23:             Students students = stdContext.Students.Single(std => std.Id == id);

Line 24:             //ViewBag.Student = students;

Line 25:             return View(students);

我的 Students.cs 模型代码:


namespace WebApplication4.Models

{

  public class Students

  {

     public string Name { get; set; }

     public int Id { get; set; }

     public int Gender { get; set; }

     public int Program { get; set; }

     public string Country { get; set; }

   }

}

我的 Context.cs 文件:


public class StudentsContext:DbContext

{

    public DbSet<Students> Students { get; set; }

    public DbSet<Programs> Programs { get; set; }

    public DbSet<Genders> Genders { get; set; }

}

程序.cs:


public class Programs

{

    public int Id { get; set; }

    public string Program { get; set; }

    public List<Students> Students { get; set; }

}

性别.cs:


public class Genders

{

    public int Id { get; set; }

    public string Gender { get; set; }

    public List<Students> Students { get; set; }

}

数据库表:

http://img3.mukewang.com/61da889d0001f04f04320526.jpg

慕慕森
浏览 327回答 2
2回答

慕侠2389804

Genders_Id和Programs_Id是 FK 列的默认 EF6 常规名称,用于分别由Genders.Students和Programs.Students集合导航属性引入的一对多关系。由于您的 FK 属性/列名称不是传统的,您应该通过[ForeinKey]数据注释来指定它们:public class Programs{&nbsp; &nbsp; // ...&nbsp; &nbsp; [ForeignKey("Program")]&nbsp; &nbsp; public List<Students> Students { get; set; }}public class Genders{&nbsp; &nbsp; // ...&nbsp; &nbsp; [ForeignKey("Gender")]&nbsp; &nbsp; public List<Students> Students { get; set; }}或(我的首选)流利的 API:protected override void OnModelCreating(DbModelBuilder modelBuilder){&nbsp; &nbsp; // ...&nbsp; &nbsp; modelBuilder.Entity<Genders>()&nbsp; &nbsp; &nbsp; &nbsp; .HasMany(e => e.Students)&nbsp; &nbsp; &nbsp; &nbsp; .WithRequired()&nbsp; &nbsp; &nbsp; &nbsp; .HasForeignKey(e => e.Gender);&nbsp; &nbsp; modelBuilder.Entity<Programs>()&nbsp; &nbsp; &nbsp; &nbsp; .HasMany(e => e.Students)&nbsp; &nbsp; &nbsp; &nbsp; .WithRequired()&nbsp; &nbsp; &nbsp; &nbsp; .HasForeignKey(e => e.Program);}

牧羊人nacy

您的问题是数据层中的连接字符串和 Web 层中的连接字符串指向不同的数据库。例如,数据层读取指向测试数据库的开发数据库 webapp。要么更新连接字符串以指向同一个数据库或者确保您的两个数据库具有相同的表和列
打开App,查看更多内容
随时随地看视频慕课网APP