日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

FreeSql (三)实体特性

發(fā)布時(shí)間:2023/12/18 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeSql (三)实体特性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

主鍵(Primary Key)

class Topic {[Column(IsPrimary = true)]public int Id { get; set; } }

約定:

  • 當(dāng)沒有指明主鍵時(shí),命名為 id 的字段將成為主鍵;(不區(qū)分大小寫)

  • 當(dāng)主鍵是 Guid 類型時(shí),插入時(shí)會(huì)自動(dòng)創(chuàng)建(有序、不重復(fù))的值,所以不需要自己賦值;(支持分布式)

自增(Identity)

class Topic {[Column(IsIdentity = true)]public int Id { get; set; } }

約定:

  • 當(dāng)沒有指明主鍵時(shí),標(biāo)記自增的成員將成為主鍵;

唯一鍵(Unique Key)

class AddUniquesInfo {public Guid id { get; set; }[Column(Unique = "uk_phone")]public string phone { get; set; }[Column(Unique = "uk_group_index, uk_group_index22")]public string group { get; set; }[Column(Unique = "uk_group_index")]public int index { get; set; }[Column(Unique = "uk_group_index22")]public string index22 { get; set; } }

唯一鍵,在多個(gè)屬性指定相同的標(biāo)識(shí),代表聯(lián)合鍵;可使用逗號(hào)分割多個(gè) UniqueKey 名。

數(shù)據(jù)庫(kù)類型(DbType)

class Topic {[Column(DbType = "varchar(128) NOT NULL")]public string Title { get; set; } }

可以在類型上指定 NOT NULL,也可以通過 [Column(IsNullable = false)] 設(shè)置;

0.9.12 版本增加了對(duì) MaxLength 特性的解析,避免字符串常用時(shí)的麻煩,上面的 varchar(128) 可改寫成:

class Topic {[MaxLength(128)]public string Title { get; set; } } 說明:由于內(nèi)部按名稱反射查找特性的,所以 MaxLengthAttribute 可以在任意地方定義。 該特性通常定義在 System.ComponentModel.DataAnnotations.MaxLengthAttribute。 如果找不到該類,可自行在項(xiàng)目中定義名稱為 MaxLengthAttribute 的特性類,如下:public class MaxLengthAttribute : Attribute {public int Length { get; }public MaxLengthAttribute(int length){this.Length = length;} }

可空(Nullable)

class Topic {[Column(IsNullable = false)]public string Title { get; set; } }

在不指定 DbType、IsNullable 時(shí),FreeSql 提供默認(rèn)設(shè)定,如:

  • int -> not null(不可為空)
  • int? -> null(可空)

一般在使用 string 類型時(shí),才需要手工指明是否可空(string 默認(rèn)可空);

忽略(Ignore)

class Topic {[Column(IsIgnore = true)]public string Title { get; set; } }

當(dāng)實(shí)體有屬性不需要映射的時(shí)候使用,內(nèi)部自動(dòng)忽略了對(duì)象的映射;

當(dāng)實(shí)體內(nèi)的屬性不是可接受的類型時(shí),可以不用指定該特定,如下不必要的指定:

class Topic {[Column(IsIgnore = true)]public Topic Parent { get; set; } }

樂觀鎖(RowVersion)

class Topic {public Guid id { get; set; }public string Title { get; set; }[Column(IsVersion = true)]public int Version { get; set; } }

更新整個(gè)實(shí)體數(shù)據(jù)時(shí),在并發(fā)情況下極容易造成舊數(shù)據(jù)將新的記錄更新。

行級(jí)鎖的原理,是利用實(shí)體某字段,如:long version,更新前先查詢數(shù)據(jù),此時(shí) version 為 1,更新時(shí)產(chǎn)生的 SQL 會(huì)附加 where version = 1,當(dāng)修改失敗時(shí)(即 Affrows == 0)拋出異常。

每個(gè)實(shí)體只支持一個(gè)行級(jí)鎖屬性。

適用 SetSource 更新,無論使用什么方法更新 version 的值都會(huì)增加 1

自定義類型映射(MapType)

class EnumTestMap {public Guid id { get; set; }[Column(MapType = typeof(string))]public ToStringMapEnum enum_to_string { get; set; }[Column(MapType = typeof(string))]public ToStringMapEnum? enumnullable_to_string { get; set; }[Column(MapType = typeof(int))]public ToStringMapEnum enum_to_int { get; set; }[Column(MapType = typeof(int?))]public ToStringMapEnum? enumnullable_to_int { get; set; }[Column(MapType = typeof(string))]public BigInteger biginteger_to_string { get; set; }[Column(MapType = typeof(string))]public BigInteger? bigintegernullable_to_string { get; set; } } public enum ToStringMapEnum { 中國(guó)人, abc, 香港 }

應(yīng)該不需要解釋了吧?

BigInteger 都可以映射使用了,但請(qǐng)注意:僅僅是 CURD 方便, Equals == 判斷可以使用,無法實(shí)現(xiàn) + - * / 等操作;

v0.9.15 版本還可以將值對(duì)象映射成 typeof(string),安裝擴(kuò)展包:

dotnet add package FreeSql.Extensions.JsonMap

fsql.UseJsonMap(); //開啟功能class TestConfig {public int clicks { get; set; }public string title { get; set; } } [Table(Name = "sysconfig")] public class S_SysConfig<T> {[Column(IsPrimary = true)]public string Name { get; set; }[JsonMap]public T Config { get; set; } }

字段位置(Position)

適用場(chǎng)景:當(dāng)實(shí)體類繼承時(shí),CodeFirst創(chuàng)建表的字段順序可能不是想要的,通過該特性可以設(shè)置順序。

創(chuàng)建表時(shí)指定字段位置,如:[Column(Position = 1],可為負(fù)數(shù)即反方向位置;

可插入(CanInsert)、可更新(CanUpdate)

該字段是否可以插入或更新,默認(rèn)值true,指定為false插入或更新時(shí)該字段會(huì)被忽略。

當(dāng)指明了 InsertColumn/UpdateColumns 等方法時(shí),該特性作用可能失效。例如 CanInsert = false 時(shí),又指明了 InsertColumns 該屬性,則仍然會(huì)插入。

名稱

FreeSql 默認(rèn)使用實(shí)體的類名,或?qū)傩悦c數(shù)據(jù)庫(kù)映射,也可以指定映射的名稱;

指定實(shí)體的表名,指定 Name 后,實(shí)體類名變化不影響數(shù)據(jù)庫(kù)對(duì)應(yīng)的表。FreeSql盡量支持了對(duì)多數(shù)據(jù)庫(kù)或schema支持,不防試試指定表名為:其他數(shù)據(jù)庫(kù).表名,不同數(shù)據(jù)庫(kù)的指定方式有差異,這一點(diǎn)以后深入解答。

[Table(Name = "db2.tb_topic111")] class Topic {//... }

指定實(shí)體的表名,修改為實(shí)體類名。指定數(shù)據(jù)庫(kù)舊的表名,修改實(shí)體命名時(shí),同時(shí)設(shè)置此參數(shù)為修改之前的值,CodeFirst才可以正確修改數(shù)據(jù)庫(kù)表;否則將視為【創(chuàng)建新表】。

[Table(OldName = "Topic")] class Topic2 {//... }

實(shí)體的屬性也有相同的功能,[Column(Name = "xxx")]

禁用遷移

IFreeSql.CodeFirst.IsAutoSyncStructure 可設(shè)置全局【自動(dòng)遷移結(jié)構(gòu)】功能,也可通過 FreeSqlBuilder.UseAutoSyncStructure(true) 創(chuàng)建 IFreeSql 的時(shí)候設(shè)置功能。

當(dāng)【實(shí)體類】對(duì)應(yīng)的是數(shù)據(jù)庫(kù)【視圖】或者其他時(shí),可通過 [Table(DisableSyncStructure = true)] 禁用指定的實(shí)體遷移操作。

[Table(DisableSyncStructure = true)] class ModelDisableSyncStructure {[Column(IsPrimary = false)]public int pkid { get; set; } }

備注

FreeSql CodeFirst 支持將 c# 代碼內(nèi)的注釋,遷移至數(shù)據(jù)庫(kù)的備注。先決條件:

1、實(shí)體類所在程序集,需要開啟 xml 文檔功能;

2、xml 文件必須與程序集同目錄,且文件名:xxx.dll -> xxx.xml;

系列文章導(dǎo)航

  • (一)入門

  • (二)自動(dòng)遷移實(shí)體

  • (三)實(shí)體特性

  • (四)實(shí)體特性 Fluent Api

  • (五)插入數(shù)據(jù)

  • (六)批量插入數(shù)據(jù)

  • (七)插入數(shù)據(jù)時(shí)忽略列

  • (八)插入數(shù)據(jù)時(shí)指定列

  • (九)刪除數(shù)據(jù)

  • (十)更新數(shù)據(jù)

  • (十一)更新數(shù)據(jù) Where

  • (十二)更新數(shù)據(jù)時(shí)指定列

  • (十三)更新數(shù)據(jù)時(shí)忽略列

  • (十四)批量更新數(shù)據(jù)

  • (十五)查詢數(shù)據(jù)

  • (十六)分頁查詢

  • (十七)聯(lián)表查詢

  • (十八)導(dǎo)航屬性

  • (十九)多表查詢

  • (二十)多表查詢 WhereCascade

  • (二十一)查詢返回?cái)?shù)據(jù)

  • (二十二)Dto 映射查詢

  • (二十三)分組、聚合

  • (二十四)Linq To Sql 語法使用介紹

  • (二十五)延時(shí)加載

  • (二十六)貪婪加載 Include、IncludeMany、Dto、ToList

  • (二十七)將已寫好的 SQL 語句,與實(shí)體類映射進(jìn)行二次查詢

  • (二十八)事務(wù)

  • (二十九)Lambda 表達(dá)式

  • (三十)讀寫分離

  • (三十一)分區(qū)分表

  • (三十二)Aop

  • (三十三)CodeFirst 類型映射

  • (三十四)CodeFirst 遷移說明

  • (三十五)CodeFirst 自定義特性

轉(zhuǎn)載于:https://www.cnblogs.com/FreeSql/p/11531302.html

總結(jié)

以上是生活随笔為你收集整理的FreeSql (三)实体特性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。