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用法探索系列

完整代码下载








本文转自匠心十年博客园博客,原文链接:http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_code_first.html,如需转载请自行联系原作者

目录
相关文章
|
5月前
|
JSON API 开发者
微店商品列表 API 接口(附代码示例)
微店商品列表 API 为开发者提供从微店平台获取商品数据的便捷途径,支持分页、分类筛选和排序等功能,响应数据以 JSON 格式返回,包含商品 ID、名称、价格等信息。通过 Python 的 `requests` 库,开发者可轻松调用该接口,实现电商工具开发、市场分析等场景应用。示例代码展示了如何发送请求并处理响应数据,助力高效利用 API 拓展业务功能。
127 10
|
8月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度
YOLOv11改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度
103 1
YOLOv11改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度
|
8月前
|
自然语言处理 算法 机器人
2025年热门智能客服机器人评测:哪款更好用?
2025年,智能客服机器人市场竞争激烈,功能日益强大。主要品牌如合力亿捷、阿里云、华为云、京东京小智和小米商城等纷纷推出具备精准语音识别、语义理解、多渠道接入等功能的产品,广泛应用于电商、金融、零售等领域,显著提升客服效率与客户满意度,降低企业运营成本。
495 0
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
234 0
|
11月前
|
机器学习/深度学习 算法 Python
随机森林算法是一种强大的集成学习方法,通过构建多个决策树并综合其结果进行预测。
随机森林算法是一种强大的集成学习方法,通过构建多个决策树并综合其结果进行预测。本文详细介绍了随机森林的工作原理、性能优势、影响因素及调优方法,并提供了Python实现示例。适用于分类、回归及特征选择等多种应用场景。
587 7
|
存储 人工智能 JSON
AI点燃体育热情— 在 PAI Artlab 创作你的奥运时刻!
为了向在赛场上的奥运健儿传递最真挚的鼓舞与喝彩,我们特此发起一场别开生面的“创意海报设计挑战”!在 Artlab 平台 ComfyUI 工具中,选择你心中的奥运项目,定制一张专属于你的奥运会加油海报!
|
JavaScript 前端开发 Java
js字符串拼接的几种方式
js字符串拼接的几种方式
250 0
|
搜索推荐 安全 大数据
大数据在医疗领域的应用与前景
【6月更文挑战第26天】大数据在医疗领域提升服务效率,助力疾病预防与精准治疗。电子病历优化数据管理,疾病预测预防个性化医疗成为可能。未来,智能医疗系统普及,远程医疗兴起,数据共享促进行业发展,同时隐私保护与安全备受关注。大数据正重塑医疗,开启健康新篇章。
|
机器学习/深度学习 搜索推荐 数据挖掘
详解相似度计算方法及其应用场景
详解相似度计算方法及其应用场景
|
Python
Pygame基础5-Surface & Rect
Pygame基础5-Surface & Rect
401 0