在过去的几天里,我一直在努力解决实体框架将寻找不存在的表的问题。我也不知道它为什么要这样做。我尝试使用现有数据库执行代码优先方法,它可以很好地替代我所有的网关,除了 3。所有 3 都处理这个名为 Student 的特定 POCO。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;
}
这给我的错误是:“执行命令定义时发生错误。有关详细信息,请参阅内部异常。” 使用上面的代码时,当我查看包含已注册学生的学生字段的 CourseOfferings 时,它给了我错误:“现有连接被远程主机强行关闭”。当我调试我的代码时,我注意到它似乎出于某种原因正在寻找一个不存在的 dbo.Students1 表。经过进一步检查,我没有指定这一点,甚至在我的任何代码中都没有提到 Student1。为什么实体框架会查找 Student1 表而不是我的 Students 表?