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; }

重新運行後就會出現如此錯誤了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章