预警:我对MVC / Entity Framework / Linq查询几乎一无所知。
我尝试查询数据库时遇到问题。以下是我使用的查询:
int? UserId = db.StudentModel
.Where(c => c.UserName == certUserName)
.Select(c => c.UserId)
.FirstOrDefault();
当它搜索数据库时,它成功检索UserId。
问题是我然后使用以下查询:
CompletionsModel student = db.Completions.Find(UserId);
当我这样做时,它会抛出一个表示
的内部异常{"列名无效' UserProfile_UserId'。"}
奇怪的是,当我转到我的代码并将鼠标移到' db'命令的一部分用于查看它所持有的数据,它具有CourseModel,StudentModel和Completions(尽管模型的实际文件名是CompletionsModel - 这是一个线索吗?),所以似乎就像他们正确联系一样。
这是我的三个模型和数据库上下文的代码。
CompletionsModel(UserProfile在我的代码中是白色文本;不知道为什么它在这里与用户ID和完成日期相同):
[Table("Completion")]
public class CompletionsModel
{
[Key]
public int UserId { get; set; }
public string PRD_NUM { get; set; }
public DateTime CompletionDate { get; set; }
public virtual CourseModel PRD { get; set; }
public virtual StudentModel UserProfile { get; set; }
}
CourseModel:
[Table("PRD")]
public class CourseModel
{
[Key]
public string PRD_NUM { get; set; }
public string PRD_TIT { get; set; }
//because any number of students can be enrolled in one course
public virtual ICollection<CompletionsModel> CompletionsModel { get; set; }
}
StudentModel:
[Table("UserProfile")]
public class StudentModel
{
[Key]
public int UserId { get; set; }
public string UserName { get; set; }
public virtual ICollection<CompletionsModel> CompletionsModel { get; set; }
}
的DbContext:
public class ClassContext : DbContext
{
public ClassContext()
: base("DefaultConnection")
{
}
public DbSet<StudentModel> StudentModel { get; set; }
public DbSet<CompletionsModel> Completions { get; set; }
public DbSet<CourseModel> CourseModel { get; set; }
}
最后,我的数据库布局的图像 - 也许这将有助于事情:
答案 0 :(得分:3)
我也在实体框架的开头,但令我恼火的是,你在完成和 UserProfile 之间有一些外键关系,没有真正定义,在完成表中将int列作为外键。
您可以尝试更改
public virtual StudentModel UserProfile { get; set; }
类似
public virtual int StudentId { get; set; }
[ForeignKey("StudentId")]
public virtual StudentModel UserProfile { get; set; }
PRD
但是,您的数据库中的更改可能不是您想要的。 您还可以做的是删除这些行
public virtual CourseModel PRD { get; set; }
public virtual StudentModel UserProfile { get; set; }
希望有所帮助。
编辑:
我想问题是,您在 Completions 表中的 UserProfile 属性中缺少ForeignKey
属性。
所以使用
[ForeignKey("UserId")]
public virtual StudentModel UserProfile { get; set; }
而不是
public virtual StudentModel UserProfile { get; set; }
如果UserIds代表同一个用户