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,如需转载请自行联系原作者

EntityFramework用法探索(三)CodeFirst流畅API相关推荐

  1. EntityFramework用法探索(二)CodeFirst

    Code First,顾名思义,要先写Code,而不是先建立数据库内容. 同样使用与上文 Database First 模式相同的例子,假设需要设计一个零售系统,我们先构建一个 Customer 类. ...

  2. EntityFramework用法探索(一)DatabaseFirst

    EntityFramework数据库优先方式,很明显,我们需要先设计数据库模型. 假设我们需要设计一个零售系统,需要一些表结构: 生成数据库建表SQL  View Code 生成数据库表 然后生成AD ...

  3. 调用非.net系统的Webservice的探索 ( 三 ) -WCF

    http://www.cnblogs.com/zitjubiz/archive/2011/09/27/WCF_Soap_Header.html 最近Oracle的DRM系统发布了新版本,其中的webS ...

  4. Fluent API — 流畅API(基于Java介绍)

    Fluent API ,流畅API, 也称作流式API. Fluent API 是一种面向对象的API,主要基于方法链. 这个概念由Eric Evans​和​Martin Fowler​于 2005 ...

  5. live http工具下载_使用通用测试工具探索Blueworks Live REST API资源

    live http工具下载 本系列的第1部分介绍了5个一般用例,它们是使用IBM®Blueworks Live的代表性状态转移(REST)应用程序编程接口(API)的最佳方法. 您还为每种用例学习了不 ...

  6. 探索Elasticsearch集群API

    Elasticsearch提供了一个非常全面和强大的REST API,您可以使用与您的集群进行交互.为数不多的可以用API的事情如下: 检查您的集群.节点和索引健康状态和统计数据 管理集群.节点和索引 ...

  7. Hadoop入门(三)HDFS API

    一..HDFS 常用类 Configuration  配置 Path  路径 FileSystem  文件系统 Stream  流 IOUtils  IO工具 API文档 二.类解析 (1)Confi ...

  8. 枚举类型用法_Mybatis-plus常见用法总结三

    前面已经介绍了Mybatis-plus基本用法,今天为大家分享一些Mybatis-plus高级应用 逻辑删除 自动注入 枚举类型处理 Sql注入器 多租户 表结构 CREATE TABLE `sys_ ...

  9. C++开源矩阵计算工具——Eigen的简单用法(三)

    本节主要涉及Eigen的块操作以及QR分解,Eigen的QR分解非常绕人,搞了很久才搞明白是怎么回事,最后是一个使用Eigen的矩阵操作完成二维高斯拟合求取光点的代码例子,关于二维高斯拟合求取光点的详 ...

最新文章

  1. SLAM Scan-Matching/Registration
  2. 由浅入深,走进Python装饰器-----第五篇:进阶--类装饰类
  3. 一个交换机到底能带几台摄像头
  4. SpringBoot v2.2.6 踩的坑 --- dubbo.scan.base_packages
  5. Java学习福利,入门到精通学习路线分享
  6. Linux下使用g++编译C++程序——Compiling Cpp
  7. 用自定义函数联合IF函数实现“一对多”查询
  8. 关于github的一些问题汇总
  9. 使用PacketSifter从pcap中筛选有价值的信息
  10. Oracle数据库日志清理
  11. CSDN上传资源无法设置积分了吗
  12. SmartForms 取消Word编辑器 恢复文本编辑器
  13. Quorum (分布式系统)
  14. com.googlecode.genericdao
  15. 一个基于腾讯云实时音视频的SDKdemo
  16. OpenScap基础应用
  17. 怎么选择WiFi短信认证硬件供应商?
  18. 2.25嵌入式设计(总结)
  19. Unfortunately XXX has stopped. 系统应用安装后导致其他应用
  20. Apache LICENSE 2.0 授权介绍

热门文章

  1. SpringBoot 配置多数据源(Sql Server、MySql)
  2. vba交付图表设计_您是在为交付目的而“设计”吗?
  3. 1年工作经验8月份大厂面试全记录
  4. FP error code老是忘记的看这里:只给出最常用的几个。
  5. windows平台下基于QT和OpenCV搭建图像处理平台
  6. 数据库编程1 Oracle 过滤 函数 分组 外连接 自连接
  7. Linux bash shell基础语法
  8. 全球增长最快域名解析商Top10:中国占据四席
  9. 看看腾讯是怎么做产品设计分析的 - 腾讯QQ音乐业务产品规划
  10. 学习了MPLS ×××