文章出處

回到目錄

在EF里,我們設計模型時,會設計到多對多關系,在EF里會把這種關系會轉成兩個一對多的關系表,這是比較友好的,因為多對多來說,對于業務本身沒什么意思,所以隱藏了,沒什么壞處,但對于這個隱藏來說,對開發人員來講你就無法主動控制這張關系表了,而需要使用EF的update來更新主表的同時去更新關系表,這對于初學者會出現一些問題,今天說的就是多對多關系無法更新和插入的問題.

數據結構

  public partial class WebManageRoles : Lind.DDD.Domain.Entity
    {
        public WebManageRoles()
        {
            this.WebManageMenus = new List<WebManageMenus>();
            this.WebManageUsers = new List<WebManageUsers>();
        }
        [DisplayName("名稱"), Required]
        public string RoleName { get; set; }
        [DisplayName("關于")]
        public string About { get; set; }
        [DisplayName("排序"), Required]
        public int SortNumber { get; set; }
        [DisplayName("最后操作人")]
        public string Operator { get; set; }
        [DisplayName("權限"), Required]
        public int OperatorAuthority { get; set; }
        [DisplayName("部門"), Required]
        public int DepartmentID { get; set; }

        public virtual WebDepartments WebDepartments { get; set; }
        public virtual ICollection<WebManageMenus> WebManageMenus { get; set; }
        public virtual ICollection<WebManageUsers> WebManageUsers { get; set; }
    }

關于AutoDetectChangesEnabled

參考:https://msdn.microsoft.com/en-us/data/jj556205.aspx

大叔的解釋,當AutoDetectChangesEnabled為true時,可以加載依賴的關系,在插入和更新時會有同步完成(多對多,一對多關系時使用),當值為false時,只更新(插入)主表的數據

問題解決

  old.WebManageMenus = menuRepository.GetModel(i => menu.Contains(i.Id)).ToList();
  old.DepartmentID = dept;
  old.RoleName = entity.RoleName;
  old.SortNumber = entity.SortNumber;
  old.About = entity.About;
  old.DataUpdateDateTime = DateTime.Now;
  roleRepository.Update(old);

在數據上下文中的設置

        public ManagerContext()
            : base("DefaultConnection")
        {
           
            this.Configuration.AutoDetectChangesEnabled = true;//對多對多,一對多進行curd操作時需要為true
            this.Configuration.LazyLoadingEnabled = false;
            this.Configuration.ProxyCreationEnabled = false;//禁止動態攔截System.Data.Entity.DynamicProxies.

        }

對技術的研究與探索,我們還在繼續和堅持...

回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()