我的表是否正确链接到Entity Framework?

时间:2014-07-29 19:19:44

标签: c# sql entity-framework asp.net-mvc-4

预警:我对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; }
}

最后,我的数据库布局的图像 - 也许这将有助于事情:

Database photo

1 个答案:

答案 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代表同一个用户