EF实体类种的Virtual关键字作用

在使用EF中我们会使用导航属性,其中会加上Virtual关键字,这个有什么作用呢。加了此关键字就可以使用lazyload懒加载,不加此特性的话是加载不出此导航属性的内容的。

例子,有两个实体sys_user 和 sys_dep

    public partial class sys_user
    {
        [Key]
        [StringLength(50)]
        public string account { get; set; }

        [StringLength(50)]
        public string name { get; set; }

        [StringLength(50)]
        public string password { get; set; }

        public int? age { get; set; }

        [StringLength(50)]
        public string sex { get; set; }

        [StringLength(50)]
        public string depid { get; set; }

        [StringLength(50)]
        public string status { get; set; }

        [StringLength(50)]
        public string roleid { get; set; }
        public virtual sys_dep sys_dep { get; set; }
    }
    public partial class sys_dep
    {
        [Key]
        [StringLength(50)]
        public string depid { get; set; }

        [StringLength(50)]
        public string depname { get; set; }

        [StringLength(50)]
        public string manager { get; set; }
    }
            using (oaEntities db = new oaEntities()) {
                db.Database.Log = s => { Console.WriteLine(s); };
                var q = db.sys_user.Select(b => b);
                foreach (var item in q) {
                    Console.WriteLine($"User Show:{item.account},{item.name},{item.sys_dep.depname}");
                }
            }

可以看到将sys_dep的depname信息显示出来了

下面我们把Virtual关键字拿掉改为        public sys_dep sys_dep { get; set; }

重新运行后就会出现如此错误了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值