網站首頁 編程語言 正文
一、配置主鍵
要顯式將某個屬性設置為主鍵,可使用 HasKey 方法。在以下示例中,使用了 HasKey 方法對 Product 類型配置 ProductId 主鍵。
1、新加Product類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPI.Model { public class Product { public int ProductId { get; set; } public string ProductName { get; set; } public decimal Price { get; set; } } }
2、新建ProductMap類,用來設置主鍵
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Entity; using System.Data.Entity.ModelConfiguration; using FluentAPI.Model; namespace FluentAPI.Data.FluentAPIMap { public class ProductMap : EntityTypeConfiguration{ public ProductMap() { //使用 HasKey 方法對 Product 類型配置 ProductId 主鍵。 this.HasKey(p => p.ProductId); } } }
3、查看數據庫
二、配置復合主鍵
以下示例配置要作為Department 類型的組合主鍵的DepartmentID 和 Name 屬性。
1、創建Department類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPI.Model { public class Department { public int DepartmentId { get; set; } public string Name { get; set; } public decimal Budget { get; set; } public DateTime StartDate { get; set; } } }
2、創建DepartmentMap類,用來設置復合主鍵
using FluentAPI.Model; using System; using System.Collections.Generic; using System.Data.Entity.ModelConfiguration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPI.Data.FluentAPIMap { public class DepartmentMap : EntityTypeConfiguration{ public DepartmentMap() { // 使用匿名類的方式配置DepartmentId和Name作為復合主鍵 this.HasKey(p => new {p .DepartmentId,p.Name}); } } }
3、查看數據庫
使用EF的數據遷移,然后查看數據庫表
三、關閉數值主鍵的標識
數值主鍵的標識DatabaseGeneratedOption是一個枚舉值,該枚舉值具有下面三個值:
DatabaseGeneratedOption.None:關閉數值主鍵。
DatabaseGeneratedOption.Identity:設置數值主鍵 自動增長 ,
DatabaseGeneratedOption.Computed :數值主鍵的值由計算得到(此列將無法插入值)。
1、設置關閉數值主鍵
using FluentAPI.Model; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.ModelConfiguration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPI.Data.FluentAPIMap { public class DepartmentMap : EntityTypeConfiguration{ public DepartmentMap() { // 使用匿名類的方式配置DepartmentId和Name作為復合主鍵 this.HasKey(p => new {p .DepartmentId,p.Name}); // 以下示例將DepartmentID 屬性設置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值不由數據庫生成。 this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); } } }
2、插入數據庫表的時候DepartmentId列要顯示的指定值:
INSERT INTO Departments VALUES (1, '人事部',12.3,GETDATE());
四、指定屬性的最大長度
HasMaxLength可以設置表中列的最大長度。
using FluentAPI.Model; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.ModelConfiguration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPI.Data.FluentAPIMap { public class DepartmentMap : EntityTypeConfiguration{ public DepartmentMap() { // 使用匿名類的方式配置DepartmentId和Name作為復合主鍵 this.HasKey(p => new {p .DepartmentId,p.Name}); // 以下示例將DepartmentID 屬性設置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值不由數據庫生成。 //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); // 以下示例將DepartmentID 屬性設置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值由數據庫自動生成。 //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); //Name屬性不應超過 50 個字符。如果其值超過 50 個字符,則出現 DbEntityValidationException 異常。 //如果 Code First 基于此模型創建數據庫,它還會將 Name 列的最大長度設置為50 個字符。 this.Property(p => p.Name).HasMaxLength(50); } } }
五、將屬性配置為必需
using FluentAPI.Model; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.ModelConfiguration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPI.Data.FluentAPIMap { public class DepartmentMap : EntityTypeConfiguration{ public DepartmentMap() { // 使用匿名類的方式配置DepartmentId和Name作為復合主鍵 this.HasKey(p => new {p .DepartmentId,p.Name}); // 以下示例將DepartmentID 屬性設置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值不由數據庫生成。 //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); // 以下示例將DepartmentID 屬性設置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值由數據庫自動生成。 //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); //Name屬性不應超過 50 個字符。如果其值超過 50 個字符,則出現 DbEntityValidationException 異常。 //如果 Code First 基于此模型創建數據庫,它還會將 Name 列的最大長度設置為50 個字符。 this.Property(p => p.Name).HasMaxLength(50); /* Name屬性是必需的。如果不指定 Name,則出現 DbEntityValidationException 異常。如果 Code First 基于此模型創建數據庫,則用于存儲此屬性的列將不可為空。 */ this.Property(p => p.Name).IsRequired(); } } }
六、指定不將CLR 屬性映射到數據庫中的列
using FluentAPI.Model; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.ModelConfiguration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPI.Data.FluentAPIMap { public class DepartmentMap : EntityTypeConfiguration{ public DepartmentMap() { // 使用匿名類的方式配置DepartmentId和Name作為復合主鍵 this.HasKey(p => new {p .DepartmentId,p.Name}); // 以下示例將DepartmentID 屬性設置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值不由數據庫生成。 //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); // 以下示例將DepartmentID 屬性設置為System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示該值由數據庫自動生成。 //this.Property(p => p.DepartmentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); //Name屬性不應超過 50 個字符。如果其值超過 50 個字符,則出現 DbEntityValidationException 異常。 //如果 Code First 基于此模型創建數據庫,它還會將 Name 列的最大長度設置為50 個字符。 this.Property(p => p.Name).HasMaxLength(50); /* Name屬性是必需的。如果不指定 Name,則出現 DbEntityValidationException 異常。如果 Code First 基于此模型創建數據庫,則用于存儲此屬性的列將不可為空。 */ this.Property(p => p.Name).IsRequired(); /* 以下示例顯示如何指定CLR 類型的屬性不映射到數據庫中的列。 Ignore 等同于數據注解NotMapped */ this.Ignore(p => p.Budget); } } }
七、將CLR 屬性映射到數據庫中的特定列
HasColumnName可以用來設置映射到數據庫表中列的列名。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Entity; using System.Data.Entity.ModelConfiguration; using FluentAPI.Model; using System.ComponentModel.DataAnnotations.Schema; namespace FluentAPI.Data.FluentAPIMap { public class ProductMap : EntityTypeConfiguration{ public ProductMap() { //使用 HasKey 方法對 Product 類型配置 ProductId 主鍵。 this.HasKey(p => p.ProductId); /* * 以下示例將Price CLR 屬性映射到ProductPrice 數據庫列。 */ this.Property(p => p.Price).HasColumnName("ProductPrice"); } } }
八、配置字符串屬性是否支持Unicode 內容
IsUnicode()方法可以用來設置是否支持Unicode字符,該方法有兩個重載函數。
1、沒有參數的重載,默認支持Unicode字符
2、有參數的重載,參數為bool值,true支持Unicode,false不支持Unicode
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Entity; using System.Data.Entity.ModelConfiguration; using FluentAPI.Model; using System.ComponentModel.DataAnnotations.Schema; namespace FluentAPI.Data.FluentAPIMap { public class ProductMap : EntityTypeConfiguration{ public ProductMap() { //使用 HasKey 方法對 Product 類型配置 ProductId 主鍵。 this.HasKey(p => p.ProductId); /* * 以下示例將Price CLR 屬性映射到ProductPrice 數據庫列。 */ this.Property(p => p.Price).HasColumnName("ProductPrice"); /* * 默認情況下,字符串為Unicode(SQLServer 中的nvarchar)。您可以使用IsUnicode 方法指定字符串應為varchar 類型。 */ this.Property(p => p.PlaceOfOrigin).IsUnicode(false); } } }
查看數據庫列類型:
九、配置數據庫列的數據類型
HasColumnType 方法支持映射到相同基本類型的不同表示。
/* HasColumnType 方法支持映射到相同基本類型的不同表示。使用此方法并不支持在運行時執行任何數據轉換。 * 請注意,IsUnicode 是將列設置為 varchar 的首選方法,因為它與數據庫無關。 */ this.Property(p => p.Name).HasColumnType("varchar");
十、配置復雜類型的屬性
1、新建類Course,里面有一個Department類型的屬性:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPIApp.Model { public class Course { public int CourseID { get; set; } public string Title { get; set; } public int Credits { get; set; } public virtual Department Department { get; set; } } }
using FluentAPI.Model; using System; using System.Collections.Generic; using System.Data.Entity.ModelConfiguration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FluentAPI.Data.FluentAPIMap { public class CourseMap : EntityTypeConfiguration{ public CourseMap() { /*可以使用點表示法訪問復雜類型的屬性。 設置Course類里面的Department屬性的Name的最大長度是32 */ this.Property(p => p.Department.Name).HasMaxLength(32); } } }
十一、將CLR 實體類型映射到數據庫中的特定表
/*Department 的所有屬性都將映射到名為 t_ Department 的表中的列。*/ ToTable("t_Department"); /*您也可以這樣指定架構名稱:*/ ToTable("t_Department", "school");
代碼地址:點此下載
原文鏈接:https://www.cnblogs.com/dotnet261010/p/7923395.html
相關推薦
- 2022-09-06 pandas?如何將字符串映射為數字_python
- 2023-01-20 Python中用try-except-finally處理異常問題_python
- 2022-02-11 Android?studio?利用共享存儲進行用戶的注冊和登錄驗證功能_Android
- 2024-01-07 IDEA中自動導包及快捷鍵
- 2022-05-18 基于python介紹pytorch保存和恢復參數_python
- 2022-11-14 python中的運算符
- 2023-02-07 k8s集群部署時etcd容器不停重啟問題以及處理詳解_云和虛擬化
- 2022-07-28 Python常用Web框架Django、Flask與Tornado介紹_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支