亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

沒有 Id 的重復實體對象

沒有 Id 的重復實體對象

C#
阿波羅的戰車 2022-12-24 14:01:18
我必須復制一個實體而不是它的 Id,然后將新實體視為一個單獨的對象。我的實體 ID 的設置訪問器不可訪問。所以我不能修改 Id 并將其設置為 null,現在我只能在數據庫中執行 AddOrUpdate(基于 Id)。我不能做一個簡單的添加。我需要能夠復制或克隆不同的實體,所以也許通用函數可以幫助我做到這一點,但我不知道從哪里開始。有什么幫助嗎?
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

一種選擇是利用 Automapper 執行淺層克隆。Automapper 可以配置為忽略特定屬性,例如 ID,或所有具有不可訪問的設置器的屬性:


因此,給定一個實體,例如:


public class SomeObject

{

    public int SomeId { get; private set; }

    public string Name { get; set; }


    public SomeObject(int? id = null)

    {

        if (id.HasValue)

            SomeId = id.Value;

    }

}

您可以像這樣配置映射器:


        var mapperConfig = new MapperConfiguration(cfg =>

        {

            cfg.CreateMap<SomeObject, SomeObject>().IgnoreAllPropertiesWithAnInaccessibleSetter();

        });

        IMapper mapper = new Mapper(mapperConfig);


        var test = new SomeObject(1) { Name = "Fred" }; // object we will clone.

        var test2 = new SomeObject(); // example of an existing "new" object to copy values into...

        mapper.Map(test, test2); // Copy values from first into 2nd..

        var test3 = mapper.Map<SomeObject>(test); // Example of letting automapper create a new clone.

在這兩種情況下,ID 列都沒有被復制。您可能希望使用“test2”示例來利用 context.Entities.Create 為新實體創建新的跟蹤代理,盡管 EF 可以很好地處理實體的新 POCO 實例,前提是將其添加到實體 DbSet。


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 87 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號