EntityFramework用法探索(三)CodeFirst流暢API

Code First?Fluent API,使用流暢API來定義模型映射。

同樣使用與上文?Database First 模式相同的例子,假設需要設計一個零售系統,我們先構建一個 Customer 類。

復制代碼
1   public class Customer
2   {
3     public long Id { get; set; }
4     public string Name { get; set; }
5     public string Address { get; set; }
6     public string Phone { get; set; }
7   }
復制代碼

這次沒有使用屬性來指定對應表名稱、主鍵等。

使用代碼創建影射,

復制代碼
 1   public class CustomerMap : EntityTypeConfiguration<Customer>
 2   {
 3     public CustomerMap()
 4     {
 5       // Primary Key
 6       this.HasKey(t => t.Id);
 7 
 8       // Properties
 9       this.Property(t => t.Name)
10           .IsRequired()
11           .HasMaxLength(256);
12 
13       this.Property(t => t.Phone)
14           .IsRequired()
15           .HasMaxLength(256);
16 
17       // Table & Column Mappings
18       this.ToTable("Customer", "STORE");
19       this.Property(t => t.Id).HasColumnName("Id");
20       this.Property(t => t.Name).HasColumnName("Name");
21       this.Property(t => t.Address).HasColumnName("Address");
22       this.Property(t => t.Phone).HasColumnName("Phone");
23 
24       // Relationships
25       //this.HasRequired(t => t.Status)
26       //    .WithMany(t => t.CustomerStatus)
27       //    .HasForeignKey(d => d.Status);
28     }
29   }
復制代碼

在上下文對象中覆寫OnModelCreating方法來添加影射配置,

復制代碼
 1   public class RetailEntities : DbContext
 2   {
 3     static RetailEntities()
 4     {
 5       //Database.SetInitializer<RetailEntities>(new CreateDatabaseIfNotExists<RetailEntities>());
 6       //Database.SetInitializer<RetailEntities>(new DropCreateDatabaseAlways<RetailEntities>());
 7       //Database.SetInitializer<RetailEntities>(new DropCreateDatabaseIfModelChanges<RetailEntities>());
 8       Database.SetInitializer<RetailEntities>(null);
 9     }
10 
11     public RetailEntities()
12       : base("Name=RetailEntities")
13     {
14     }
15 
16     public DbSet<Customer> Customers { get; set; }
17 
18     protected override void OnModelCreating(DbModelBuilder modelBuilder)
19     {
20       modelBuilder.Configurations.Add(new CustomerMap());
21     }
22   }
復制代碼

ICustomerRepository接口和實現依然類似,

復制代碼
 1     public void InsertCustomer(DomainModels.Customer customer)
 2     {
 3       using (RETAILContext context = new RETAILContext())
 4       {
 5         Customer entity = Mapper.Map<DomainModels.Customer, Customer>(customer);
 6         context.Customers.Add(entity);
 7         context.SaveChanges();
 8 
 9         customer.Id = entity.Id;
10       }
11     }
12 
13     public void UpdateCustomer(DomainModels.Customer customer)
14     {
15       using (RETAILContext context = new RETAILContext())
16       {
17         Customer entity = context.Customers.AsQueryable().Single(c => c.Id == customer.Id);
18 
19         entity.Name = customer.Name;
20         entity.Address = customer.Address;
21         entity.Phone = customer.Phone;
22 
23         context.SaveChanges();
24       }
25     }
復制代碼

同樣的測試代碼,

復制代碼
 1       ICustomerRepository customerRepository = new CustomerRepository();
 2 
 3       // =============== 增 ===============
 4       Console.ForegroundColor = ConsoleColor.DarkRed;
 5 
 6       DomainModels.Customer customer1 = new DomainModels.Customer()
 7       {
 8         Name = "Dennis Gao",
 9         Address = "Beijing",
10         Phone = "18888888888",
11       };
12       customerRepository.InsertCustomer(customer1);
13       Console.WriteLine(customer1);
復制代碼

當然,你可能覺得手工寫影射代碼還是比較繁瑣,如果已有部分數據表結構,希望反向生成代碼,可使用工具?Entity Framework Power Tools?來生成。

Entity Framework Power Tools?拯救程序員啊。

完整代碼和索引

EntityFramework用法探索系列

  • (一)DatabaseFirst
  • (二)CodeFirst
  • (三)CodeFirst流暢API
  • (四)Repository和UnitOfWork
  • (五)引入Unity
  • (六)靜態Repository
  • (七)線程安全實踐
  • (八)事務處理

完整代碼下載







本文轉自匠心十年博客園博客,原文鏈接:http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_code_first_fluent_api.html,如需轉載請自行聯系原作者

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

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

相關文章

[轉]JS導出PDF

通過純js將網頁保存為pdf&#xff0c;A4分頁&#xff0c;無需服務端參與 1.引入js庫文件&#xff1a; <script src"../static/jspdf/html2canvas.js"></script><script src"../static/jspdf/jsPdf.debug.js"></script> 2.思路&a…

js瀏覽器對象模型(BOM)

瀏覽器對象模型(Browser Object Model,BOM)&#xff1a;瀏覽器為js提供的對象集合。 1 windows對象 windows對象&#xff1a;表示瀏覽器的框架以及與其相關的內容&#xff0c;比如滾動條和導航欄圖標等等。或者說windows對象就代表瀏覽器本身。windows對象是個全局對象&#xf…

Hello Playwright:(8)等待頁面加載

在我們前面的文章中&#xff0c;我們始終使用await page.GotoAsync(url);加載頁面&#xff0c;我們的目的是等待足夠長的時間讓頁面上的元素出現。但是&#xff0c;我們更希望永遠不要因為等待浪費任何時間。WaitUntilGotoAsync方法的定義如下&#xff1a;Task<IResponse?&…

【ArcGIS微課1000例】0012:ArcGIS創建及連接ArcSDE企業級地理數據庫實例

文章目錄 實驗材料實驗過程創建企業級數據庫連接企業級數據庫創建要素類要素入庫實驗材料 ArcGIS:版本為10.2Server.ecp:版本為10.2SQL Server:版本為2008實驗過程 創建企業級數據庫 企業級地理數據庫的創建需要通過工具箱來實現。 數據庫平臺:SQL Server 實例:localhos…

C語言試題172之實現冒泡排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現冒泡…

Qt移動應用開發(八):實現跨平臺的QML和OpenGL混合渲染

Qt移動應用開發&#xff08;八&#xff09;&#xff1a;實現跨平臺的QML和OpenGL混合渲染 上一篇文章講到了利用C這個橋梁&#xff0c;我們實現了QML和Java的交互。Qt 5大力推崇的QML/JS開發&#xff0c;讓輕量、高速開發的QML/JS打頭陣&#xff0c;讓重量的C撐腰&#xff0c;差…

【HTML5初探之form標簽】解放表單驗證、增加文件上傳、集成拖放

導航【初探HTML5之使用新標簽布局】用html5布局我的博客頁&#xff01;【HTML5初探之form標簽】解放表單驗證、增加文件上傳、集成拖放【HTML5初探之繪制圖像&#xff08;上&#xff09;】看我canvas元素引領下一代web頁面【HTML5初探之繪制圖像&#xff08;下&#xff09;】看…

兩時間差

/** * Comments:返回時間差 * param 兩個字符串類型的時間差(time1-time2),type(D天,H時,M分,S秒,Z-S天時分秒) * return */ public final static SimpleDateFormat SF_SIZE19 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//初始化時間格式 public static String …

【ArcGIS微課1000例】0013:ArcGIS創建色帶圖例(以GlobeLand30土地覆蓋數據為例)

本文以GlobeLand30土地覆蓋數據(2010年)為例,講解在ArcGIS中創建色帶圖例的方法。 案例數據: 色帶圖例: 創建過程: 選擇2010年數據,點擊添加到右側的圖例項。 在圖例向導里面,刪除圖例標題,點擊下一步。

使用.NET IoT驅動超聲波測距傳感器

背景最近買的一堆傳感器到貨了&#xff0c;先來把玩一下超聲波測距傳感器。超聲波傳感器一般用于機器人&#xff0c;小車的避障&#xff0c;物體的測距&#xff0c;液位檢測&#xff0c;停車檢測等領域。HC-SR04知識回顧開始之前我們先復習一下高中的物理知識。原理通過上圖的原…

2019-nCoV 全國新型肺炎疫情每日動態趨勢可視圖

傳染源: 野生動物&#xff0c;可能為中華菊頭蝠 病毒: 新型冠狀病毒 2019-nCoV 傳播途徑: 經呼吸道飛沫傳播&#xff0c;亦可通過接觸傳播 易感人群: 人群普遍易感。老年人及有基礎疾病者感染后病情較重&#xff0c;兒童及嬰幼兒也有發病 潛伏期: 一般為 3~7 天&#xff0c;最長…

C語言試題173之實現插入排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現排序…

【ArcGIS遇上Python】ArcGIS Python將多個文件夾內的分幅數據整合到同一個文件夾內——以Globeland30數據為例

文章目錄 WinRAR解壓縮ArcGIS Python批處理從Glabeland30官網下載的全球地覆蓋數據包括3年(2000、2010、2020),每一年都是按圖幅存儲的tif格式柵格數據。以2000的數據為例,全球共812個圖幅,每一個圖幅對應一個壓縮包,如下圖所示。 WinRAR解壓縮 在進行數據預處理時,必須…

Delphi中字符串比較大小 VS Oracle-SQL中字符串比較大小

重點注意Delphi和Oracle-SQL中比較字符串時空字符串的根本性的不同Delphi中的字符串比較 Delphi中字符串比較大小的規則&#xff1a;對應位置的字符按照字符編碼值逐個對比&#xff0c;直到遇到可以確定大小關系的就結束比較參考《Delphi的Ord函數和ASCII碼對照表》 常見的一些…

STM8S和STM8L調試串口中斷的注意點

源&#xff1a;STM8S和STM8L調試串口中斷的注意點

C語言試題174之實現快速排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現快速…

解決slideDown()、slideUp()執行結束后才執行下一次,導致鼠標離開后很久動畫依然在執行的問題...

問題描述&#xff1a; 給一個容器設置了mouseenter時&#xff0c;一個隱藏的box通過slideDown()顯示出來&#xff1b;mouseleave時&#xff0c;通過slideUp()隱藏。 當鼠標不斷在容器上滑過時&#xff0c;會導致鼠標離開很久后&#xff0c;動畫也在不斷執行 解決方法&#xff…

Docker Compose 安裝 Superset

前言動手學 dockerSuperset 是一個強大的在線 SQL 查詢編輯工具&#xff0c;同時也是一個輕量級的 BI 工具&#xff0c;今天我們就來動手學一下用 docker compose 安裝 Superset。安裝動手學 docker安裝 git 并克隆項目&#xff1a;yum install git -ygit clone https://github…

[轉]再見 NoSQL!

為解決大規模數據集合多重數據種類帶來的挑戰&#xff0c;NoSQL 應運而生&#xff0c;但現在卻也遇到了諸多問題&#xff0c;本文作者 Rick Negrin&#xff0c;曾在微軟工作 12 年&#xff0c;并在 SQL Server 團隊度過大部分光陰&#xff0c;他提出&#xff0c;是時候「和 NoS…

【ArcGIS Pro微課1000例】0008:ArcGIS Pro加載不同來源的在線底圖數據

ArcGIS Pro可以很方便的選擇不同來源的在線底圖數據,如中國地圖彩色版、各種形式的天地圖等。 打開ArcGIS Pro,點擊左下角的【設置】。 點擊【選項】。 ArcGIS Pro提供了三種形式的底圖:組織的默認底圖、自定義底圖<