EntityFramework用法探索(三)CodeFirst流畅API
生活随笔
收集整理的這篇文章主要介紹了
EntityFramework用法探索(三)CodeFirst流畅API
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Code First?Fluent API,使用流暢API來(lái)定義模型映射。
同樣使用與上文?Database First 模式相同的例子,假設(shè)需要設(shè)計(jì)一個(gè)零售系統(tǒng),我們先構(gòu)建一個(gè) Customer 類(lèi)。
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 }這次沒(méi)有使用屬性來(lái)指定對(duì)應(yīng)表名稱(chēng)、主鍵等。
使用代碼創(chuàng)建影射,
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 }在上下文對(duì)象中覆寫(xiě)OnModelCreating方法來(lái)添加影射配置,
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接口和實(shí)現(xiàn)依然類(lèi)似,
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 }同樣的測(cè)試代碼,
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);當(dāng)然,你可能覺(jué)得手工寫(xiě)影射代碼還是比較繁瑣,如果已有部分?jǐn)?shù)據(jù)表結(jié)構(gòu),希望反向生成代碼,可使用工具?Entity Framework Power Tools?來(lái)生成。
Entity Framework Power Tools?拯救程序員啊。
完整代碼和索引
EntityFramework用法探索系列
- (一)DatabaseFirst
- (二)CodeFirst
- (三)CodeFirst流暢API
- (四)Repository和UnitOfWork
- (五)引入U(xiǎn)nity
- (六)靜態(tài)Repository
- (七)線(xiàn)程安全實(shí)踐
- (八)事務(wù)處理
完整代碼下載
本文轉(zhuǎn)自匠心十年博客園博客,原文鏈接:http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_code_first_fluent_api.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的EntityFramework用法探索(三)CodeFirst流畅API的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网构软件-Internetware
- 下一篇: 【HTML5初探之form标签】解放表单