我是ASP.NET MVC4中的新手。這是我的問題:簡單實體框架導航錯誤
我有兩個表如下:
`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.
問題的原因是什麼以及如何解決這個問題?
也許你應該在技術上添加這是可能的,但它不是一個通常推薦的方法。 –
通常情況下,您將使用http請求關聯上下文,因此您將在http請求結束時關閉數據庫上下文,並且在這種情況下延遲加載將會起作用。就我個人而言,我不是懶惰加載的粉絲 –
我明白了,非常感謝你! –