在EF里,我們設計模型時,會設計到多對多關系,在EF里會把這種關系會轉(zhuǎn)成兩個一對多的關系表,這是比較友好的,因為多對多來說,對于業(yè)務本身沒什么意思,所以隱藏了,沒什么壞處,但對于這個隱藏來說,對開發(fā)人員來講你就無法主動控制這張關系表了,而需要使用EF的update來更新主表的同時去更新關系表,這對于初學者會出現(xiàn)一些問題,今天說的就是多對多關系無法更新和插入的問題.
數(shù)據(jù)結構
public partial class WebManageRoles : Lind.DDD.Domain.Entity { public WebManageRoles() { this.WebManageMenus = new ListWebManageMenus>(); this.WebManageUsers = new ListWebManageUsers>(); } [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 ICollectionWebManageMenus> WebManageMenus { get; set; } public virtual ICollectionWebManageUsers> WebManageUsers { get; set; } }
關于AutoDetectChangesEnabled
參考:https://msdn.microsoft.com/en-us/data/jj556205.aspx
大叔的解釋,當AutoDetectChangesEnabled為true時,可以加載依賴的關系,在插入和更新時會有同步完成(多對多,一對多關系時使用),當值為false時,只更新(插入)主表的數(shù)據(jù)
問題解決
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);
在數(shù)據(jù)上下文中的設置
public ManagerContext() : base("DefaultConnection") { this.Configuration.AutoDetectChangesEnabled = true;//對多對多,一對多進行curd操作時需要為true this.Configuration.LazyLoadingEnabled = false; this.Configuration.ProxyCreationEnabled = false;//禁止動態(tài)攔截System.Data.Entity.DynamicProxies. }
以上所述是小編給大家介紹的關于多對多關系表無法更新與插入的問題 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!