【发布时间】:2016-07-17 11:11:41
【问题描述】:
我在实体框架中使用数据库优先方法。我有两个表,即 Person 和 Role 表。 Person 表有 3 列
- 人员标识
- 姓名
- 角色 ID
角色表有 2 列
- 角色 ID
- 角色名称
这两个表的自动生成的类以及外键关系如下。
public partial class Role
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Role()
{
this.People = new HashSet<Person>();
}
public int RoleId { get; set; }
public string RoleName { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Person> People { get; set; }
}
public partial class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
public virtual Role Role { get; set; }
}
我使用以下代码从角色表中检索数据
public List<Role> GetRole()
{
var _context= new TestDBEntities();
List<Role> data = new List<Role>();
data = _context.Roles.ToList();
return data;
}
从 Role 表中检索数据时,Role 表中的所有数据都已检索,但 Person 表数据也随之检索。背后的原因一定是这两张表的关系。所以,我只想从 Role 表中获取数据。任何人都可以帮助我如何仅在没有来自 Person 的数据的情况下从 Role 表中获取数据?
【问题讨论】:
-
你怎么知道 Person 列表也被加载了?
-
我正在使用断点进行调试,所以我可以看到角色数据行中的人员列表
-
Ivan 下面回答了我为什么会发生这种情况。如果您从 ICollection
中删除 'virtual' 关键字,则在您手动加载相关对象之前不会出现。 -
我解决了,但我不必从 ICollection
中删除“虚拟”关键字。相反,我在继承 DbContext 的 EntitiesClass 的构造函数中禁用了延迟加载。 public TestDBEntities() : base("name=TestDBEntities") { this.Configuration.LazyLoadingEnabled = false; }
标签: c# asp.net asp.net-mvc-4 entity-framework-6