FreeSql (三)實體特性

主鍵(Primary Key)

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

約定:

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

  • 當主鍵是 Guid 類型時,插入時會自動創建(有序、不重復)的值,所以不需要自己賦值;(支持分布式)

自增(Identity)

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

約定:

  • 當沒有指明主鍵時,標記自增的成員將成為主鍵;

唯一鍵(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; }
}

唯一鍵,在多個屬性指定相同的標識,代表聯合鍵;可使用逗號分割多個 UniqueKey 名。

數據庫類型(DbType)

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

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

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

class Topic {[MaxLength(128)]public string Title { get; set; }
}
說明:由于內部按名稱反射查找特性的,所以 MaxLengthAttribute 可以在任意地方定義。
該特性通常定義在 System.ComponentModel.DataAnnotations.MaxLengthAttribute。
如果找不到該類,可自行在項目中定義名稱為 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 時,FreeSql 提供默認設定,如:

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

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

忽略(Ignore)

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

當實體有屬性不需要映射的時候使用,內部自動忽略了對象的映射;

當實體內的屬性不是可接受的類型時,可以不用指定該特定,如下不必要的指定:

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

更新整個實體數據時,在并發情況下極容易造成舊數據將新的記錄更新。

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

每個實體只支持一個行級鎖屬性。

適用 SetSource 更新,無論使用什么方法更新 version 的值都會增加 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 { 中國人, abc, 香港 }

應該不需要解釋了吧?

BigInteger 都可以映射使用了,但請注意:僅僅是 CURD 方便, Equals == 判斷可以使用,無法實現 + - * / 等操作;

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

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)

適用場景:當實體類繼承時,CodeFirst創建表的字段順序可能不是想要的,通過該特性可以設置順序。

創建表時指定字段位置,如:[Column(Position = 1],可為負數即反方向位置;

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

該字段是否可以插入或更新,默認值true,指定為false插入或更新時該字段會被忽略。

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

名稱

FreeSql 默認使用實體的類名,或屬性名與數據庫映射,也可以指定映射的名稱;

指定實體的表名,指定 Name 后,實體類名變化不影響數據庫對應的表。FreeSql盡量支持了對多數據庫或schema支持,不防試試指定表名為:其他數據庫.表名,不同數據庫的指定方式有差異,這一點以后深入解答。

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

指定實體的表名,修改為實體類名。指定數據庫舊的表名,修改實體命名時,同時設置此參數為修改之前的值,CodeFirst才可以正確修改數據庫表;否則將視為【創建新表】。

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

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

禁用遷移

IFreeSql.CodeFirst.IsAutoSyncStructure 可設置全局【自動遷移結構】功能,也可通過 FreeSqlBuilder.UseAutoSyncStructure(true) 創建 IFreeSql 的時候設置功能。

當【實體類】對應的是數據庫【視圖】或者其他時,可通過 [Table(DisableSyncStructure = true)] 禁用指定的實體遷移操作。

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

備注

FreeSql CodeFirst 支持將 c# 代碼內的注釋,遷移至數據庫的備注。先決條件:

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

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

系列文章導航

  • (一)入門

  • (二)自動遷移實體

  • (三)實體特性

  • (四)實體特性 Fluent Api

  • (五)插入數據

  • (六)批量插入數據

  • (七)插入數據時忽略列

  • (八)插入數據時指定列

  • (九)刪除數據

  • (十)更新數據

  • (十一)更新數據 Where

  • (十二)更新數據時指定列

  • (十三)更新數據時忽略列

  • (十四)批量更新數據

  • (十五)查詢數據

  • (十六)分頁查詢

  • (十七)聯表查詢

  • (十八)導航屬性

  • (十九)多表查詢

  • (二十)多表查詢 WhereCascade

  • (二十一)查詢返回數據

  • (二十二)Dto 映射查詢

  • (二十三)分組、聚合

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

  • (二十五)延時加載

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

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

  • (二十八)事務

  • (二十九)Lambda 表達式

  • (三十)讀寫分離

  • (三十一)分區分表

  • (三十二)Aop

  • (三十三)CodeFirst 類型映射

  • (三十四)CodeFirst 遷移說明

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

轉載于:https://www.cnblogs.com/FreeSql/p/11531302.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring 中構造Constructor、@Autowired、@PostConstruct、靜態方法的執行順序 (@PostConstruct 說明)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 關于注解 PostConstruct public interface PostConstructPostConstruct 注釋用于在依賴關系注入完成之后需要執行的方法上&#xff…

科目三靠邊停車駕駛流程

科目三靠邊停車項目考試要求是什么&#xff1f;靠邊停車駕駛難不難&#xff1f;有什么駕駛技巧嗎&#xff1f; 靠邊停車考試項目中規定&#xff0c;車前保險杠離目標前后均不超過1250px&#xff0c;車距目標的橫向距離保持在50-2500px之間&#xff0c;同時停車后車要與路邊平行…

FreeSql (四)實體特性 Fluent Api

FreeSql 提供使用 Fluent Api&#xff0c; 在外部配置實體的數據庫特性&#xff0c;Fluent Api 的方法命名與特性名保持一致&#xff0c;如下&#xff1a; fsql.CodeFirst.ConfigEntity<TestFluenttb1>(a > {a.Name("xxdkdkdk1").SelectFilter("a.Id22…

mybatis3 中 @Provider 的使用方式

若用MyBatis注解方式寫sql&#xff0c;又想要XML寫法的判斷入參拼接條件&#xff0c;可以通過SelectProvider方式實現。 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 新建Provider …

科目三電子路考易錯細節總結

小編咨詢了多家駕校的教練員&#xff0c;總結了科目三電子路考中&#xff0c;考生犯錯率最高的幾個細節&#xff0c;下面就一起來看看是哪些吧&#xff0c;希望對還沒參加科目三考試的朋友有所幫助。 ●起步前不使用安全帶 在等待了約2小時后&#xff0c;考生史某終于坐上了考…

java 查詢功能實現的八種方式

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是記錄一下 1. HQL 2. Mybatis : mapper.xml 中寫 sql 。 3. Mybatis : 注解 Select Select("select * from xxx_order wher…

科目三夜考考試內容及過關攻略

駕考科目三夜考&#xff0c;考試內容是什么&#xff1f;夜考到底難不難&#xff1f;具體評判標準是什么&#xff1f;夜考有什么駕駛技巧嗎&#xff1f;本文&#xff0c;小編將一一為大家解析&#xff01; ●夜考過關攻略 場外考試的新增內容就是&#xff1a;在夜間和低能見度…

聯合索引:創建、刪除、查看 (解決報錯:Duplicate key name)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 創建聯合索引&#xff1a; CREATE INDEX idx_xxx_stitution ON xxx_order (status,institution_code) idx_xxx_stitution &#x…

科目三場外考試易出錯的環節

現在很多的城市都已經開始實行電子考試&#xff0c;這使得科目三考試更加公平公正&#xff0c;但還是有考生在考試中忽略了場外易出錯的環節導致成績不合格。●起步前不使用安全帶在等待了約2小時后&#xff0c;考生史某終于坐上了考試車。史某很興奮地調整了座位&#xff0c;觀…

FreeSql (八)插入數據時指定列

插入數據時指定列&#xff0c;和忽略列對應&#xff0c;未被指定的列將被忽略。 var connstr "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;" "Initial Catalogcccddd;Charsetutf8;SslModenone;Max pool size10";IFreeSql fsql new FreeSq…

mybatis 中 Example 的使用 :條件查詢、排序、分頁(三種分頁方式 : RowBounds、PageHelpler 、limit )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 import tk.mybatis.mapper.entity.Example;import com.github.pagehelper.PageHelper;...Overridepublic List<Repayxxx> listRep…

科目三大路考8個駕駛技巧

駕考科目三考試&#xff0c;大路考的考試內容是什么&#xff0c;有什么考試要點&#xff0c;考試時&#xff0c;有哪些細節要注意&#xff1f;下面&#xff0c;就跟著小編一起來看看吧&#xff01; 科目三大路考駕駛技巧是在實際道路上駕駛機動車進行起步前的準備、起步、通過…

FreeSql (九)刪除數據

刪除是一個非常危險的操作&#xff0c;FreeSql對刪除支持并不強大&#xff0c;僅支持了單表有條件的刪除方法。 不想過多的介紹拉長刪除數據的系列文章&#xff0c;刪除數據的介紹僅此一篇。 若Where條件為空的時候執行方法&#xff0c;FreeSql僅返回0或默認值&#xff0c;不執…

解決: IDEA 代碼 commit 后,Local Changes 中代碼依舊在,提交失敗,報錯:is out of date

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 代碼提交后 Local Changes 中的代碼未消失。查看 Event log 發現提交失敗。 如下 紅框中位置就是 Event log&#xff0c;或者點擊…

FreeSql (十)更新數據

FreeSql支持豐富的更新數據方法&#xff0c;支持單條或批量更新&#xff0c;在特定的數據庫執行還可以返回更新后的記錄值。 var connstr "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;" "Initial Catalogcccddd;Charsetutf8;SslModenone;Max po…

科目三的7個小步驟

科目三路考中&#xff0c;做好幾個步驟就可以順利的通過考試了&#xff0c;以下來分享下路考中需要注意的幾個點。1、上車前&#xff0c;無論你在車輛的什么位置&#xff0c;請務必從車的右側繞過車頭走到駕駛室門前&#xff0c;先觀察車前道路上是否有障礙&#xff0c;再觀察車…

解決:The ‘Access-Control-Allow-Origin‘ header contains multiple values‘x, *‘, but only one is allowed.

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 跨域問題報錯&#xff1a; Access to XMLHttpRequest at http://xx.xx.xx.xx/getUser from origin http://ergouzi.fun has been bloc…

科目三道路考試技巧流程詳解

科目三是公認最難的考試科目&#xff0c;它不像科目二練習是在駕校訓練場&#xff0c;有些技術不錯的學員也會卡在這個項目上&#xff0c;由于突發狀況多&#xff0c;了解考試流程是必不可少的。考試流程&#xff1a;1、上車前的準備工作2、上車起步3、變更車道4、直線行駛5、學…

springbootajaxhas been blocked by CORS policy: No ‘Access-Control-Allow-Origin

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 ajaxspringboot解決跨域問題&#xff0c;以下報的錯誤就是html跨域的問題 Access to XMLHttpRequest at http://localhost:8080/user/l…

起步前要做哪些準備?

開車前&#xff0c;做好起步的準備工作是必不可少的&#xff0c;有的人可能還不知道開車前要做那些起步工作。一、開車起步前&#xff0c;檢查工作不能忘1、檢查車子輪胎是否完好&#xff0c;若發現輪胎有損毀&#xff0c;及時更換。2、檢查地面是否有會造成傷害的事或物&#…