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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取本地實體或附加一個新實體

獲取本地實體或附加一個新實體

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

2 回答

?
翻過高山走不出你

TA貢獻1875條經(jīng)驗 獲得超3個贊

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


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


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;

        }

    }

}

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


您的案例的用法如下:


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


查看完整回答
反對 回復 2021-07-31
?
DIEA

TA貢獻1820條經(jīng)驗 獲得超3個贊

我多年來一直在使用 EF,但我從未使用過附加機制,它通常只會讓您陷入困境。

如果我查看代碼,我猜您想在 2 個用戶記錄之間創(chuàng)建關系,但您想通過不查詢兩個用戶記錄來優(yōu)化性能。(就我個人而言,我不會關心 20 毫秒的開銷,它會花費我獲取用戶對象,但我想這可能很重要)。


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

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


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

請注意,在我的上一個代碼示例中,我沒有查詢兩個用戶對象,但 EF 將創(chuàng)建帶有 2 個有效外鍵的 UserRelation 記錄。


查看完整回答
反對 回復 2021-07-31
  • 2 回答
  • 0 關注
  • 200 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號