繁体   English   中英

使用实体框架中的数据库优先方法,如何仅从具有多个外键关系的单个表中获取数据?

[英]Using Database first approach in Entity framework, how to fetch the data from a single table only which has multiple foreign key relationship?

我在实体框架中使用数据库优先方法。 我有两个表,即人和角色表。 人员表有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; }
}

我使用以下代码从“角色”表中检索数据

    public List<Role> GetRole()
    {
        var _context= new TestDBEntities();
        List<Role> data = new List<Role>();
        data  = _context.Roles.ToList();
        return data;
    }

从角色表中检索数据时,从角色表中检索了所有数据,但同时检索了人表数据。 其背后的原因一定是这两个表之间的关系。 因此,我只想从“角色”表中获取数据。 任何人都可以协助我如何仅从Person中获取数据而不从Role表中获取数据吗?

显示的代码不会检索相关数据,而是在其他一些代码第一次访问People属性时。 它可能是调试器变量窗口或一些序列化代码。

此行为称为“ 延迟加载” 可以通过多种方式禁用它,最简单的方法是从导航属性中删除virtual关键字。 在“代码优先”中,您将直接在代码中执行此操作,在EDMX设计器中,我猜必须有一些控制生成的属性访问器的属性。 或使用“ 使用数据库优先”方法线程有选择地禁用延迟加载中介绍的技术。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM