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.mzph.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提供了三种形式的底图:组织的默认底图、自定义底图<