实体框架正在查找一个不存在的表
本文关键字:一个 不存在 框架 查找 实体 | 更新日期: 2023-09-27 18:18:41
在过去的几天里,我一直在努力解决这个问题,实体框架将寻找一个不存在的表。我也不知道它为什么会这样。我尝试用现有的数据库做一个代码优先的方法,它作为我所有网关的替代品,除了3。所有这三个都处理一个特定的POCO,叫做Student。POCO类如下:
public class Student
{
public Guid StudentId { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public String Grade { get; set; }
public virtual ICollection<CourseOffering> CourseOfferings { get; set; }
}
我的上下文文件是:
class GatewayContext : DbContext
{
public DbSet<Course> Course { get; set; }
public DbSet<CourseType> CourseTypes { get; set; }
public DbSet<CourseOffering> CourseOfferings { get; set; }
public DbSet<Staff> Staff { get; set; }
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<CourseOffering>()
.HasMany(x => x.Students)
.WithMany(x => x.CourseOfferings)
.Map(x =>
{
x.ToTable("Students");
x.MapLeftKey("StudentId");
x.MapRightKey("CourseOfferings");
});
}
}
使用这些调用网关的代码是:
try
{
GatewayContext context = new GatewayContext();
var students = from p in context.Students
select p;
var studentList = new List<Services.Proxy.TransferObjects.Student>();
foreach (var student in students)
{
studentList.Add(student);
}
return studentList;
}
catch (Exception ex)
{
throw;
}
给我的错误是:"执行命令定义时发生错误。当使用上述代码时,当我查看包含已注册学生的Students字段的CourseOfferings时,它会给我一个错误:"现有连接被远程主机强制关闭"。当我调试我的代码时,我注意到它似乎在寻找一个不存在的dbo。由于某种原因,学生们表。经过进一步的检查,我没有在任何地方的任何代码中指定它,甚至没有提到Students1。为什么实体框架寻找一个Students1表,而不是我的学生表?
您正在将您的many-to-many
表映射到名为"Students"的表:
modelBuilder.Entity<CourseOffering>()
.HasMany(x => x.Students)
.WithMany(x => x.CourseOfferings)
.Map(x =>
{
x.ToTable("Students");
x.MapLeftKey("StudentId");
x.MapRightKey("CourseOfferings");
});
所以当EF尝试创建实际的表"Students"时,它必须将其重命名为"Students1"。
您可能希望将many-to-many
表重命名为StudentsCourseOfferings
以遵循约定。这将在数据库中创建两个表:StudentsCourseOfferings
和Students