Entity Framework - 列名无效“User_ID”
Entity Framework - Invalid Column Name 'User_ID"
我有一个在 ASP.NET MVC 5 框架之上用 C#
编写的项目。我正在使用 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
导航 属性,我会收到以下错误
Invalid column name 'User_Id'.
执行以下命令后出现上述错误
if(user.MainClassRoom != null)
{
// Some something with user.MainClassRoom
}
什么可能导致此错误?我该如何解决?
尝试将外键属性添加到 ICollection 导航中 属性:
[ForeignKey("UserId")]
public virtual ICollection<ClassRoom> AvailableClassRooms { get; set; }
由于您更改了命名约定,因此您必须在关系的两端都进行设置。
我通常更喜欢使用 EF 的 fluent API 来执行此操作,因为它更灵活,而且您最终不会使用魔术字符串。
我有一个在 ASP.NET MVC 5 框架之上用 C#
编写的项目。我正在使用 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
导航 属性,我会收到以下错误
Invalid column name 'User_Id'.
执行以下命令后出现上述错误
if(user.MainClassRoom != null)
{
// Some something with user.MainClassRoom
}
什么可能导致此错误?我该如何解决?
尝试将外键属性添加到 ICollection 导航中 属性:
[ForeignKey("UserId")]
public virtual ICollection<ClassRoom> AvailableClassRooms { get; set; }
由于您更改了命名约定,因此您必须在关系的两端都进行设置。
我通常更喜欢使用 EF 的 fluent API 来执行此操作,因为它更灵活,而且您最终不会使用魔术字符串。