日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

.NET中實現對象數據映射示例詳解

瀏覽:414日期:2022-06-08 16:37:18
目錄
  • 前言
    • 示例
    • Mapster 使用
  • 總結

    前言

    對象數據映射即將一個對象的數據根據特定規則批量映射到另一個對象中,減少手工操作和降低人為出錯率。如將 DTO 對象和 Entity 實體相互轉換映射。

    示例

    在我們平常表單提交中,我們通常會定義一個DTO讓用戶填寫一些必須的信息而并不是將數據庫所有的字段羅列讓用戶填寫,在過去我們需要如何操作:

    // 數據庫User表public class User {    public int UserId { get; set; } // 用戶編號    public string UserName { get; set; } // 用戶名稱    public int Age { get; set; } // 年齡    public DateTime? CreateAt { get; set; } // 創建時間    public int CreateBy { get; set; } // 創建人    public DateTime Birthday { get; set; } // 生日}

    如上數據庫表設計,我們用戶編號、創建時間、創建人、包括年齡都是系統計算或者系統生成的,可能提供給用戶填寫的數據只有名稱和生日:

    public class UserRequestDto {    public string UserName { get; set; }    public DateTime Birthday { get; set; }}

    在以前我們應該這樣處理

    public async Task Create(UserRequestDto request) {    // 實例化一個User實體,并且將用戶填寫內容一個一個賦值    User user = new User();    user.UserName = request.UserName;    user.Birthday = request.Birthday;    user.CreateAt = DateTime.Now;    ....    // 創建用戶    await context.User.InsertAsync(user);}

    問題: 如果很多地方需要這樣的賦值操作,那么將有非常多的代碼冗余,而且如果字段過多非常容易出錯,操作效率極低。

    有了如上問題,我們實現自動映射的需求就出現了,在C#中有比較優秀的對象映射工具 MapsterAutoMapper,據說 Mapster 使用簡單且性能高。

    Mapster 使用

    Mapster 是一個使用簡單,功能強大,性能極佳的對象映射框架。與 AutoMapper 相比在速度和內存占用方面表現更加優秀,可以在只使用1/3內存的情況下獲得4倍的性能提升。

    MethodMeanStdDevErrorGen 0Gen 1Gen 2Allocated'Mapster 6.0.0'108.59 ms1.198 ms1.811 ms31000.0000--124.36 MB'Mapster 6.0.0 (Roslyn)'38.45 ms0.494 ms0.830 ms31142.8571--124.36 MB'Mapster 6.0.0 (FEC)'37.03 ms0.281 ms0.472 ms29642.8571--118.26 MB'Mapster 6.0.0 (Codegen)'34.16 ms0.209 ms0.316 ms31133.3333--124.36 MB'ExpressMapper 1.9.1'205.78 ms5.357 ms8.098 ms59000.0000--236.51 MB'AutoMapper 10.0.0'420.97 ms23.266 ms35.174 ms87000.0000--350.95 MB

    如上為官方提供的性能測試表格,當然還是根據個人喜好選擇,具體測試結果也僅供參考,大家也可以自行研究選擇。

    • 映射到一個新的對象
    // 一行代碼搞定,就是這么神奇User user =  request.Adapt<User>();

    • 在EFCore中使用 (Mapster 提供了對 IQueryable 的映射擴展)

    在EFCore中查詢所需要的格式我們通常使用Select實現

    context.User.Select(x => new UserDto {    UserName = x.UserName,    Age = x.Age    ...    ...})

    使用 ProjectToType 映射到目標類型

    var result = context.User.ProjectToType&lt;UserDto&gt;().ToList();
    • 自定義映射

    在某些特殊情況下當我們源屬性類型和目標屬性名稱不對應的時候我們可以進行自定義映射關系

    // 在數據映射時,將出生日期通過計算方法映射給返回的AgeTypeAdapterConfig<User, UserDto>    .NewConfig()    .Ignore("Id")//指定忽略某些字段    .Map(dest => dest.Age, src => CalcAge(src.Birthday));
    • 在某些情況下,如果需要在 依賴注入(DI)使用,Mapster提供了IMapperandMapper
    public void ConfigureServices(IServiceCollection services){    var config = new TypeAdapterConfig();    services.AddSingleton(config);//使用單例注冊    services.AddScoped<IMapper, ServiceMapper>();//注冊服務}// Service進行依賴注入private readonly IMapper _mapper;public UserService(IMapper mapper) {    _mapper = mapper;}public void Create(UserRequestDto request) {    // 使用服務    var user = _mapper.Map<User>(request);}
    • 數據類型轉化
    decimal i = 123.Adapt<decimal>();// int轉換成decimalvar e = "Read, Write, Delete".Adapt<Enum>(); // 枚舉

    總結

    使用 Mapster 能讓我們在處理尤其是 Entity 與 DTO 之間數據相互映射,如果手動映射會導致效率差,代碼冗余, Mapster的優勢還是非常明顯的,當然也不是說 AutoMapper 就非常拉跨,大家根據自己的需求選擇即可。

    以上就是.NET中實現對象數據映射示例詳解的詳細內容,更多關于.NET對象數據映射的資料請關注其它相關文章!

    標簽: ASP.NET
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    国产精品视频一区二区三区综合| 精品一区欧美| 四虎在线精品| 美国三级日本三级久久99| 一区在线观看| 欧美成人日韩| 精品久久中文| 日韩精品网站| 亚州av日韩av| 国产成人精品一区二区三区免费 | 国产精品yjizz视频网| 91精品一区国产高清在线gif| 午夜av成人| 久久精品免视看国产成人| 欧美aa一级| 久久国产精品99国产| 国精品产品一区| 99re国产精品| 黄色在线观看www| 欧美日本精品| 亚洲天堂日韩在线| 99国产精品免费视频观看| 亚洲综合激情在线| 精品国产亚洲一区二区三区大结局| 国产欧美日韩免费观看| 国模精品一区| 久久99伊人| 久久午夜影院| 欧美日韩中文一区二区| 亚洲欧美日韩国产综合精品二区| 午夜久久av| 日韩在线短视频| 国产精品午夜av| 欧美精品一区二区久久| 日韩精品网站| 在线视频精品| 99视频精品全部免费在线视频| 偷拍欧美精品| 麻豆精品久久| 日韩**一区毛片| 亚洲女同中文字幕| 成人日韩在线| 亚洲日本网址| 欧美激情三区| 999久久久精品国产| 香蕉精品久久| 鲁大师成人一区二区三区| 国产一区日韩一区| 亚洲欧美视频| 日韩中文影院| 国产亚洲精aa在线看| 日韩欧美精品一区二区综合视频| 视频在线在亚洲| 红桃视频国产一区| 国产99在线| 日本综合字幕| 色偷偷色偷偷色偷偷在线视频| 亚洲深夜视频| 国产精品成久久久久| 97精品资源在线观看| 久久久一本精品| 风间由美中文字幕在线看视频国产欧美| 欧美专区一区二区三区| 群体交乱之放荡娇妻一区二区| 久久精品午夜| 波多视频一区| 久久久久一区| 婷婷丁香综合| 麻豆成人在线| 亚洲综合激情在线| 日本午夜精品| 国产精品成人自拍| 卡一精品卡二卡三网站乱码| 欧美国产中文高清| 高清av一区| 免费av一区二区三区四区| 亚洲网站视频| av在线最新| 日韩一区电影| 欧美在线资源| 日韩欧美中文字幕在线视频| 国产欧美亚洲一区| 韩国精品主播一区二区在线观看 | 免费视频国产一区| 日韩精品一区第一页| 欧美综合社区国产| 黄色网一区二区| 欧美国产中文高清| 久久精品官网| 午夜日韩福利| 国产精品v一区二区三区| 免费国产亚洲视频| 日韩高清一区| 蜜臀久久精品| 日韩av一二三| 激情久久五月| 美日韩一区二区三区| 九九综合九九| 成人午夜网址| 日韩欧美美女在线观看| 99久久九九| 国产精品115| 中文字幕一区二区三区日韩精品| 久久精品日韩欧美| 亚洲一区资源| 日韩欧美高清一区二区三区| 人人精品亚洲| 香蕉精品久久| 国产欧美一区二区三区国产幕精品 | 日韩午夜视频在线| 欧洲精品一区二区三区| 日韩精品91亚洲二区在线观看| 日韩精品影视| 美女精品久久| 欧美中文字幕| 久久精品国产99久久| 欧美国产另类| 久久激情综合网| 日韩精品午夜视频| 天使萌一区二区三区免费观看| 日韩专区精品| 国产欧美一区二区三区精品酒店| 中文字幕av一区二区三区人| 免费在线观看一区| 国产乱子精品一区二区在线观看| 亚洲作爱视频| 国产91精品对白在线播放| 高潮久久久久久久久久久久久久| 久久av综合| 欧美日韩亚洲三区| 日韩精品亚洲专区| **爰片久久毛片| 国产精品调教视频| 牛牛精品成人免费视频| 国产精品自在| 久久中文字幕导航| 国产在视频一区二区三区吞精| 精品久久网站| 欧洲亚洲一区二区三区| 国产主播一区| 亚洲精品一级| 国产精品1区在线| 丝袜美腿亚洲色图| 亚洲3区在线| 免费观看日韩电影| 亚洲人成在线影院| 久久精品99久久久| 国产成人免费av一区二区午夜| 日本不良网站在线观看| 欧美一区二区三区激情视频| av成人国产| 国产人成精品一区二区三| 美女视频免费精品| 亚洲不卡av不卡一区二区| 香蕉久久99| 国产探花一区二区| 蜜桃精品在线| 蜜臀久久99精品久久久久宅男| 国产日韩中文在线中文字幕| 国产激情一区| 在线成人直播| 久久蜜桃精品| 美女久久一区| 国产第一亚洲| 日韩专区欧美专区| 国产极品模特精品一二| 婷婷综合社区| 国产精品115| 亚洲欧美高清| 日本一区二区免费高清| 一区二区三区四区在线观看国产日韩| 国产一区二区三区亚洲综合| 亚洲一区日韩在线| 精品女同一区二区三区在线观看| 99久精品视频在线观看视频| 日韩国产一二三区| 国产欧美一区二区三区精品观看| 久久美女精品| 久久精品国产999大香线蕉| 亚洲欧美日韩视频二区| 久久精品二区三区| 久久久成人网| 国产亚洲一区二区三区啪| 久久久久99| 成人在线丰满少妇av| 日韩成人精品一区二区三区| 麻豆mv在线观看| 免费成人在线影院| 男人天堂欧美日韩| 亚洲国产不卡| 精品久久97| 国产欧美日韩在线观看视频| 美女精品在线观看| 国产黄色精品| 国产精品三p一区二区| 国产免费av国片精品草莓男男| 亚洲欧洲av| 日本欧美一区| 天堂中文av在线资源库| 精品国产免费人成网站|