为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕慕森 2022-01-09 15:02:30
我正在学习使用 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; }}数据库表:
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

Genders_Id和Programs_Id是 FK 列的默认 EF6 常规名称,用于分别由Genders.Students和Programs.Students集合导航属性引入的一对多关系。


由于您的 FK 属性/列名称不是传统的,您应该通过[ForeinKey]数据注释来指定它们:


public class Programs

{

    // ...

    [ForeignKey("Program")]

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

}


public class Genders

{

    // ...

    [ForeignKey("Gender")]

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

}

或(我的首选)流利的 API:


protected override void OnModelCreating(DbModelBuilder modelBuilder)

{

    // ...


    modelBuilder.Entity<Genders>()

        .HasMany(e => e.Students)

        .WithRequired()

        .HasForeignKey(e => e.Gender);


    modelBuilder.Entity<Programs>()

        .HasMany(e => e.Students)

        .WithRequired()

        .HasForeignKey(e => e.Program);

}


查看完整回答
反对 回复 2022-01-09
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

您的问题是数据层中的连接字符串和 Web 层中的连接字符串指向不同的数据库。

例如,数据层读取指向测试数据库的开发数据库 webapp。

要么更新连接字符串以指向同一个数据库

或者

确保您的两个数据库具有相同的表和列


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 326 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信