我在Entity框架中使用Database first方法。我有两个表,即人员和角色表。 人员表有3列
角色表有2列
下面是这两个表的自动生成类以及外键关系。
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; }
}
我使用以下代码从Role表
中检索数据 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表中获取数据吗?
答案 0 :(得分:3)
显示的代码检索到的相关数据不,但是当其他一些代码第一次访问People
属性时。它可能是调试器变量窗口或某些序列化代码。
此行为称为Lazy Loading。它可以通过多种方式禁用,最简单的方法是从导航属性中删除virtual
关键字。在Code First中,您可以直接在代码中执行此操作,在EDMX设计器中,我猜必须有一些属性控制生成的属性访问器。或者使用Selective disabling of lazy loading with Database First method主题中描述的技术。