溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決多對(duì)多關(guān)系表無(wú)法更新與插入的問題

發(fā)布時(shí)間:2021-09-16 17:25:00 來(lái)源:億速云 閱讀:135 作者:柒染 欄目:開發(fā)技術(shù)

如何解決多對(duì)多關(guān)系表無(wú)法更新與插入的問題,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

在EF里,我們?cè)O(shè)計(jì)模型時(shí),會(huì)設(shè)計(jì)到多對(duì)多關(guān)系,在EF里會(huì)把這種關(guān)系會(huì)轉(zhuǎn)成兩個(gè)一對(duì)多的關(guān)系表,這是比較友好的,因?yàn)槎鄬?duì)多來(lái)說(shuō),對(duì)于業(yè)務(wù)本身沒什么意思,所以隱藏了,沒什么壞處,但對(duì)于這個(gè)隱藏來(lái)說(shuō),對(duì)開發(fā)人員來(lái)講你就無(wú)法主動(dòng)控制這張關(guān)系表了,而需要使用EF的update來(lái)更新主表的同時(shí)去更新關(guān)系表,這對(duì)于初學(xué)者會(huì)出現(xiàn)一些問題,今天說(shuō)的就是多對(duì)多關(guān)系無(wú)法更新和插入的問題。

數(shù)據(jù)結(jié)構(gòu)

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("關(guān)于")]
public string About { get; set; }
[DisplayName("排序"), Required]
public int SortNumber { get; set; }
[DisplayName("最后操作人")]
public string Operator { get; set; }
[DisplayName("權(quán)限"), 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; }
}

關(guān)于AutoDetectChangesEnabled

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

大叔的解釋,當(dāng)AutoDetectChangesEnabled為true時(shí),可以加載依賴的關(guān)系,在插入和更新時(shí)會(huì)有同步完成(多對(duì)多,一對(duì)多關(guān)系時(shí)使用),當(dāng)值為false時(shí),只更新(插入)主表的數(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ù)上下文中的設(shè)置

public ManagerContext()
: base("DefaultConnection")
{
this.Configuration.AutoDetectChangesEnabled = true;//對(duì)多對(duì)多,一對(duì)多進(jìn)行curd操作時(shí)需要為true
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;//禁止動(dòng)態(tài)攔截System.Data.Entity.DynamicProxies.
}

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI