我正在学习使用asp.net mvc和Entity Framework开发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);
我对Student.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; }
}
Programs.cs:
public class Programs
{
public int Id { get; set; }
public string Program { get; set; }
public List<Students> Students { get; set; }
}
Genders.cs:
public class Genders
{
public int Id { get; set; }
public string Gender { get; set; }
public List<Students> Students { get; set; }
}
数据库表:
答案 0 :(得分:4)
Genders_Id
和Programs_Id
是由Genders.Students
和Programs.Students
集合导航属性分别引入的一对多关系的FK列的默认EF6常规名称。
由于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);
}
答案 1 :(得分:0)
您的问题是您在数据层中的连接字符串和在Web层中的连接字符串指向不同的数据库。
例如数据层读取开发人员数据库webapp并指向测试数据库。
要么更新连接字符串以指向相同的数据库
或
确保两个数据库具有相同的表和列