最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

dapper使用Insert或update時(shí)部分字段不映射到數(shù)據(jù)庫(kù)

 更新時(shí)間:2023年12月14日 10:07:24   作者:香煎三文魚  
我們?cè)谑褂胐apper的insert或update方法時(shí)可能會(huì)遇見一些實(shí)體中存在的字段但是,數(shù)據(jù)庫(kù)中不存在的字段,這樣在使用insert時(shí)就是拋出異常提示字段不存在,這個(gè)時(shí)候該怎么解決呢,下面給大家分享示例實(shí)體代碼,感興趣的朋友一起看看吧

我們?cè)谑褂胐apper的insert或update方法時(shí)可能會(huì)遇見一些實(shí)體中存在的字段但是,數(shù)據(jù)庫(kù)中不存在的字段,這樣在使用insert時(shí)就是拋出異常提示字段不存在,這個(gè)時(shí)候該怎么解決呢,下面一起看一下:

示例實(shí)體

這里我們假如 test字段在數(shù)據(jù)庫(kù)中不存在

[Table("DemoTable")]
public class DemoTable:BaseEntity,ISoftDelete
{
    public bool isDelete { get; set; }
    [Key]
    [Comment("主鍵")]
    public int id { get; set; }
    [Comment("姓名")]
    [MaxLength(20)]
    public string name { get; set; }
    [Comment("身份證號(hào)")]
    [MaxLength(18)]
    public string idCard { get; set; }
    public string test { get; set; } 
}

1.自己根據(jù)實(shí)體生成sql(相對(duì)復(fù)雜)

這里我們可以通過(guò)反射獲取實(shí)體的屬性,去判斷忽略不需要的字段

private string GetTableName() => typeof(T).Name;
public async Task<int> CreateAsync(T entity)
{
    try
    {
        using IDbConnection db = GetOpenConn();
        var type = entity.GetType();
        //在這里我們略過(guò)了 id 和test 字段,這樣在生成sql時(shí)就不會(huì)包含
        var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public)
                            .Where(prop => !string.IsNullOrWhiteSpace(prop.GetValue(entity))&& prop.Name != "id" && prop.Name != "test ");
        var columns = string.Join(", ", properties.Select(prop => prop.Name));
        var values = string.Join(", ", properties.Select(prop => $"@{prop.Name}"));
        var query = $"INSERT INTO {GetTableName()} ({columns}) VALUES ({values})";
        return Convert.ToInt32(await db.QueryAsync(query, entity));
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}

2.使用特性跳過(guò)屬性

使用特性的方式就非常簡(jiǎn)單粗暴啦,引用using Dapper.Contrib.Extensions;

在不需要的映射的屬性上添加[Write(false)]

using Dapper.Contrib.Extensions;
	[Write(false)]
	public int id { get; set; }
	[Write(false)]
    public string test { get; set; } 
using Dapper.Contrib.Extensions;
	[Write(false)]
	public int id { get; set; }
	[Write(false)]
    public string test { get; set; } 

然后直接調(diào)用Insert方法即可

public async Task<int> CreateAsync(T entity)
{
    try
    {
        using IDbConnection db = GetOpenConn();
		return db.Insert<T>(entity);
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}

到此這篇關(guān)于dapper使用Insert或update時(shí)部分字段不映射到數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)dapper字段不映射到數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Navicat?premium?for?mac?12的安裝破解圖文教程

    Navicat?premium?for?mac?12的安裝破解圖文教程

    Navicat Premium是一款數(shù)據(jù)庫(kù)管理工具,將此工具連接數(shù)據(jù)庫(kù),你可以從中看到各種數(shù)據(jù)庫(kù)的詳細(xì)信息,這篇文章主要介紹了Mac下Navicat?premium?for?mac?12的安裝破解過(guò)程,需要的朋友可以參考下
    2024-01-01
  • sql學(xué)習(xí)之CASE WHEN THEN ELSE END的用法

    sql學(xué)習(xí)之CASE WHEN THEN ELSE END的用法

    這篇文章主要介紹了sql學(xué)習(xí)之CASE WHEN THEN ELSE END的用法,需要的朋友可以參考下
    2014-06-06
  • 記一次SQL優(yōu)化的實(shí)戰(zhàn)記錄

    記一次SQL優(yōu)化的實(shí)戰(zhàn)記錄

    作為開發(fā)人員,我們免不了與sql打交道,有些sql可能在業(yè)務(wù)的最開始,執(zhí)行是毫無(wú)問(wèn)題的,但是隨著業(yè)務(wù)量的提升以及業(yè)務(wù)復(fù)雜度的加 深,可能之前的sql就會(huì)需要優(yōu)化了,下面這篇文章主要給大家介紹了關(guān)于一次SQL優(yōu)化的實(shí)戰(zhàn)記錄,需要的朋友可以參考下
    2022-07-07
  • SQL Server數(shù)據(jù)庫(kù)性能優(yōu)化技術(shù)

    SQL Server數(shù)據(jù)庫(kù)性能優(yōu)化技術(shù)

    SQL Server數(shù)據(jù)庫(kù)性能優(yōu)化技術(shù)...
    2007-06-06
  • SQL關(guān)系模型的知識(shí)梳理總結(jié)

    SQL關(guān)系模型的知識(shí)梳理總結(jié)

    這篇文章主要為大家介紹了SQL關(guān)系模型,文中對(duì)SQL關(guān)系模型的知識(shí)作了詳細(xì)的梳理總結(jié),有需要的朋友可以借鑒參考下希望能夠有所幫助
    2021-10-10
  • Navicat添加外鍵詳細(xì)操作步驟

    Navicat添加外鍵詳細(xì)操作步驟

    這篇文章主要介紹了Navicat添加外鍵詳細(xì)操作步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SQL服務(wù)器面臨的危險(xiǎn)和補(bǔ)救.讀[十種方法]后感.

    SQL服務(wù)器面臨的危險(xiǎn)和補(bǔ)救.讀[十種方法]后感.

    SQL服務(wù)器面臨的危險(xiǎn). 危險(xiǎn):沒有防火墻保護(hù),暴露在公網(wǎng)中. 后果:SQL蠕蟲感染和黑客進(jìn)行拒絕服務(wù)攻擊、緩存溢出、SQL盲注和其它攻擊. 補(bǔ)救:安裝一款防火墻,即使經(jīng)費(fèi)有限,網(wǎng)上也有大把的免費(fèi)產(chǎn)品.
    2008-05-05
  • SQLMesh 模型管理指南從創(chuàng)建到驗(yàn)證的實(shí)踐記錄

    SQLMesh 模型管理指南從創(chuàng)建到驗(yàn)證的實(shí)踐記錄

    本文全面介紹SQLMesh這一現(xiàn)代化數(shù)據(jù)轉(zhuǎn)換工具的核心功能,重點(diǎn)講解模型創(chuàng)建、編輯、驗(yàn)證和刪除的全生命周期管理方法,通過(guò)具體示例和最佳實(shí)踐,幫助數(shù)據(jù)工程師掌握SQLMesh的高效工作流程,感興趣的朋友一起看看吧
    2025-05-05
  • Navicat?Premium?12數(shù)據(jù)庫(kù)管理解決方案

    Navicat?Premium?12數(shù)據(jù)庫(kù)管理解決方案

    Navicat?Premium?12是一款跨平臺(tái)數(shù)據(jù)庫(kù)管理工具,支持MySQL、Oracle等多數(shù)據(jù)庫(kù)系統(tǒng),提供數(shù)據(jù)可視化、SQL調(diào)試、版本控制、性能監(jiān)控及安全保護(hù)等功能,顯著提升數(shù)據(jù)庫(kù)管理效率與團(tuán)隊(duì)協(xié)作能力,下面為大家介紹Navicat?Premium?12數(shù)據(jù)庫(kù)管理解決方案,感興趣的朋友一起看看吧
    2025-08-08
  • Mybatis分頁(yè)插件的實(shí)例詳解

    Mybatis分頁(yè)插件的實(shí)例詳解

    這篇文章主要介紹了Mybatis分頁(yè)插件的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

博湖县| 牙克石市| 汉中市| 阿拉善左旗| 长垣县| 裕民县| 榆社县| 周至县| 吉安市| 比如县| 喜德县| 时尚| 临颍县| 沾化县| 鄂托克前旗| 通道| 自治县| 商水县| 乌拉特后旗| 巴马| 耒阳市| 扎兰屯市| 莱西市| 永寿县| 车致| 怀柔区| 清远市| 克什克腾旗| 湘潭县| 涟源市| 澎湖县| 仙居县| 龙门县| 大荔县| 彭山县| 桓仁| 湖口县| 塔河县| 新疆| 汤阴县| 荔浦县|