EntityFramework用法探索(二)CodeFirst
Code First,顾名思义,要先写Code,而不是先建立数据库内容。
同样使用与上文 Database First 模式相同的例子,假设需要设计一个零售系统,我们先构建一个 Customer 类。
1 [Table("Customer", Schema = "STORE")] 2 public class Customer 3 { 4 [Key] 5 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 6 public long Id { get; set; } 7 public string Name { get; set; } 8 public string Address { get; set; } 9 public string Phone { get; set; } 10 }
通过使用TableAttribute来指定数据表名称和使用的SchemaName。
通过KeyAttribute来指定表主键,并通过DatabaseGeneratedAttribute来指定该主键为自增字段。
构建访问上下文,
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 }
其中包含了几种数据库初始化选项,
- CreateDatabaseIfNotExists 如果数据库不存在则创建。
- DropCreateDatabaseAlways 总是先删除已有数据库并创建新的。
- DropCreateDatabaseIfModelChanges 判断如果模型有修改在重建数据库。
同时需要在配置文件中指定数据库访问字符串,
<connectionStrings><add name="RetailEntities" connectionString="Data Source=localhost\DENNIS;Initial Catalog=RETAIL;Integrated Security=True;MultipleActiveResultSets=True;Application Name=WhenEntityFrameworkMeetUnity;" providerName="System.Data.SqlClient" /></connectionStrings>
这样,就可以构建同样的增删改查功能了。参考上文DatabaseFirst中定义个ICustomerRepository接口。
1 public void InsertCustomer(DomainModels.Customer customer) 2 { 3 using (RetailEntities context = new RetailEntities()) 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 (RetailEntities context = new RetailEntities()) 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);
完整代码和索引
EntityFramework用法探索系列
- (一)DatabaseFirst
- (二)CodeFirst
- (三)CodeFirst流畅API
- (四)Repository和UnitOfWork
- (五)引入Unity
- (六)静态Repository
- (七)线程安全实践
- (八)事务处理
完整代码下载
EntityFramework用法探索(二)CodeFirst相关推荐
- EntityFramework用法探索(三)CodeFirst流畅API
Code First Fluent API,使用流畅API来定义模型映射. 同样使用与上文 Database First 模式相同的例子,假设需要设计一个零售系统,我们先构建一个 Customer 类 ...
- EntityFramework用法探索(一)DatabaseFirst
EntityFramework数据库优先方式,很明显,我们需要先设计数据库模型. 假设我们需要设计一个零售系统,需要一些表结构: 生成数据库建表SQL View Code 生成数据库表 然后生成AD ...
- 【深度学习】DIY 人脸识别技术的探索(二)
[深度学习]DIY 人脸识别技术的探索(二) 文章目录 训练模型 工具 结果展示 问题二的模型建立与求解 基于 KNN 的人脸识别模型 训练模型 MTCNN 可以并行训练(3 个网络同时训练,前提是内 ...
- Python Pillow(PIL)库的用法介绍(二)
Python Pillow(PIL)库的用法介绍(二) 在上一篇文章中介绍了Pillow库的一些基本用法,参考:https://blog.csdn.net/weixin_43790276/articl ...
- 【零基础学Java】—final关键字与四种用法(二十九)
[零基础学Java]-final关键字与四种用法(二十九) 一.final关键字 final关键字代表最终.不可改变的 常见的四种用法: 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部 ...
- Redis Sentinel 机制与用法(二)
本专栏与Redis相关的文章 Redis Sentinel机制与用法(一) Redis Sentinel机制与用法(二) Jedis的JedisSentinelPool源代码分析 Jedis的Shar ...
- Excel函数之— SUMPRODUCT用法(二),太强大了
上一篇文章给大家介绍了SUMPRODUCT的求和用法,今天给大家介绍用 SUMPRODUCT来统计的用法 SUMPRODUCT 函数功能 SUMproduc先计算多个数组的元素之间的乘积再求和 SUM ...
- Web scraper使用教程-进阶用法(二)-爬取二级页面内容
进阶用法(二)-爬取二级页面内容 1. 爬取网址 https://docs.microsoft.com/en-us/officeupdates/update-history-microsoft365- ...
- MySQL中的关键字用法(二)
MySQL中的关键字的用法(二) limit:偏移量和数量 注意limit和offset的区别,下面有写到offset,注意区分: 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时 ...
最新文章
- 中国LINUX内核开发大会 ppt演讲资料 与 会议视频
- 大数据时代千帆竞发,三代测序激流勇进
- Linux下通过源码编译安装程序
- c语言sleep_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美
- cocos2dX改变锚点位置
- Ubuntu的中文是哪种字体?python的词云分析和 三国演义人物出场统计
- 前端学习(1370):错误处理中间件
- C++:17---函数指针
- IDEA依赖冲突分析神器—Maven Helper
- Lync Server 2010标准版系列PART3:证书准备
- 安卓添加滚轮代码_[按键精灵手机版教程]安卓实战——制作天天酷跑脚本(2)...
- 西南财大计算机学院官网,西南财经大学
- xshell的一些常用配置
- 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制隔离级别
- 现代通信原理A.1-a:仿真确定信号波形与频谱(Matlab版)
- 神策分析 1.13 版本用户分群全新升级,为企业打磨精细化运营基石
- 超级简单的三次方程求解!
- linux 嵌入式开发常用网站整理
- Django框架之DRF框架
- 基于CCE Kubernetes网络与持久化存储实战