第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

獲取本地實(shí)體或附加一個(gè)新實(shí)體

獲取本地實(shí)體或附加一個(gè)新實(shí)體

C#
SMILET 2021-07-20 16:05:57
我的實(shí)體看起來(lái)像這樣:public class User{    public int Id {get; set;}}我不想在每次獲得特定用戶時(shí)查詢(xún)數(shù)據(jù)庫(kù),其中我知道此 ID 存在用戶。似乎 Attach 適用于這種情況,但是如果 DbContext 已經(jīng)在本地存儲(chǔ)了此特定用戶的實(shí)體,它將引發(fā)異常。例如我想做的事情:var user1 = ctx.GetLocalOrAttach(new User{Id = 1});var user2 = ctx.GetLocalOrAttach(new User{Id = 2});AddUserRelation(user1, user2);有什么解決辦法嗎?如果不是,檢查本地是否存在實(shí)體的理想方法是什么。
查看完整描述

2 回答

?
翻過(guò)高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以搜索該DbSet<T>.Local屬性,但這將是低效的。


IMO 的更好方法是使用FindTracked我的回答中的自定義擴(kuò)展方法,以在 EntityFrameworkCore 中按 ID 刪除加載和卸載的對(duì)象


using Microsoft.EntityFrameworkCore.Internal;


namespace Microsoft.EntityFrameworkCore

{

    public static partial class CustomExtensions

    {

        public static TEntity FindTracked<TEntity>(this DbContext context, params object[] keyValues)

            where TEntity : class

        {

            var entityType = context.Model.FindEntityType(typeof(TEntity));

            var key = entityType.FindPrimaryKey();

            var stateManager = context.GetDependencies().StateManager;

            var entry = stateManager.TryGetEntry(key, keyValues);

            return entry?.Entity as TEntity;

        }

    }

}

這類(lèi)似于 EF CoreFind方法,但如果實(shí)體在本地不存在,則不會(huì)從數(shù)據(jù)庫(kù)加載實(shí)體。


您的案例的用法如下:


var user1 = ctx.FindTracked(1) ?? ctx.Attach(new User { Id = 1 }).Entity;

var user2 = ctx.FindTracked(2) ?? ctx.Attach(new User { Id = 2 }).Entity;

AddUserRelation(user1, user2);


查看完整回答
反對(duì) 回復(fù) 2021-07-31
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊

我多年來(lái)一直在使用 EF,但我從未使用過(guò)附加機(jī)制,它通常只會(huì)讓您陷入困境。

如果我查看代碼,我猜您想在 2 個(gè)用戶記錄之間創(chuàng)建關(guān)系,但您想通過(guò)不查詢(xún)兩個(gè)用戶記錄來(lái)優(yōu)化性能。(就我個(gè)人而言,我不會(huì)關(guān)心 20 毫秒的開(kāi)銷(xiāo),它會(huì)花費(fèi)我獲取用戶對(duì)象,但我想這可能很重要)。


EF 允許您使用外鍵創(chuàng)建記錄,而無(wú)需加載外部實(shí)體。

因此,您可以從以下代碼更改以下代碼:


var user1 = context.Users.Find(1);

var user2 = context.Users.Find(2);

var userRelation = new UserRelation();

userRelation.FromUser = user1;

userRelation.ToUser = user2;

context.UserRelations.Add(userRelation);

到 :


var userRelation = new UserRelation();

userRelation.FromUserId = 1;

userRelation.ToUserId = 2;

context.UserRelations.Add(userRelation);

請(qǐng)注意,在我的上一個(gè)代碼示例中,我沒(méi)有查詢(xún)兩個(gè)用戶對(duì)象,但 EF 將創(chuàng)建帶有 2 個(gè)有效外鍵的 UserRelation 記錄。


查看完整回答
反對(duì) 回復(fù) 2021-07-31
  • 2 回答
  • 0 關(guān)注
  • 192 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)