简单实体框架导航错误
本文关键字:错误 导航 框架 实体 简单 | 更新日期: 2023-09-27 18:33:05
我是MVC4 ASP.NET 新手。这是我的问题:
我有两个表格如下:
`Users(Username, Password, Email, RoleId)`
和
`Roles(Id, Name)`
哪个Users.RoleId
是对Roles.Id
的外键引用
这是我的课程:
[Table("Users")]
public class User
{
[Key, Required, DatabaseGenerated(DatabaseGeneratedOption.None)]
[StringLength(20)]
public string Username { get; set; }
[StringLength(32), Required]
public string Password { get; set; }
[StringLength(70), Required]
public string Email { get; set; }
public int RoleId { get; set; }
public virtual Role Role { get; set; }
}
[Table("Roles")]
public class Role
{
public Role()
{
Users = new HashSet<User>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int Id { get; set; }
[StringLength(30)]
public string Name { get; set; }
public virtual ICollection<User> Users { get; set; }
}
public class Database : DbContext
{
public Database()
: base("WebstoreDbConnectionString")
{
}
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
现在,我可以使用以下命令选择数据库中的所有用户:
using (var db = new Database())
{
ViewBag.Users = db.Users.ToList();
}
并在视图中显示它:
@foreach(var user in ViewBag.Users) {
<p>@user.Username | @user.Password</p>
}
但是声明:@user.Role.Name
给我一个错误:
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
问题的原因是什么以及如何解决这个问题?
上面的建议很好。但是,错误消息表示当您尝试从用户访问角色属性时,您已关闭连接。它应该工作,因为您将其声明为"虚拟",这意味着您想要延迟加载。
using (var db = new Database())
{
ViewBag.Users = db.Users.ToList();
}
当您尝试使用"using"包装数据库连接时,您已经在语句之后处理了连接。如果以后可以关闭连接,则不需要"包含在此处"。
尝试如下:
using (var db = new Database())
{
ViewBag.Users = db.Users.Include("Role").ToList();
}