0

C#我有一个在 ASP.NET MVC 5 框架之上编写的项目。我正在使用 Entity Framework 6.2 ORM 与我的数据库进行交互。

我有以下 2 个实体类

public class User
{
    [Key]
    public int Id { get; set;}
    public string FirstName { get; set; }

    public int? MainClassRoomId { get; set; }
    // ....

    [ForeignKey("MainClassRoomId")]
    public virtual ClassRoom MainClassRoom { get; set; }

    public virtual ICollection<ClassRoom> AvailableClassRooms { get; set; }
}

public class ClassRoom
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string Title { get; set; }
    public int UserId { get; set; }
    // ....

    [ForeignKey("UserId")]
    public virtual User Instructor { get; set; }
}

我找到一个没有这样问题的用户

User user = DataContext.Users.FirstOrDefault(x => x.Id == 10);

但是,如果我想访问MainClassRoom导航属性,我会收到以下错误

列名“User_Id”无效。

执行以下操作后出现上述错误

if(user.MainClassRoom != null)
{
   // Some something with user.MainClassRoom
}

什么可能导致此错误?我该如何解决?

4

1 回答 1

1

尝试将外键属性添加到 ICollection 导航属性:

[ForeignKey("UserId")]
public virtual ICollection<ClassRoom> AvailableClassRooms { get; set; } 

由于您更改了命名约定,因此您必须在关系的两侧进行设置。

我通常更喜欢使用 EF 的 fluent API 来执行此操作,因为它更灵活,而且您最终不会使用魔术字符串。

于 2019-02-28T22:55:48.487 回答