EntityFramework默认映射规则
我不太习惯通过CodeFirst去维护数据库(尽管这是未来实现自动编程的必经之路),还是喜欢通过数据库设计工具如PowerDesigner去建表。如果不想对EF的实体和数据表做什么映射的话,就要注意默认映射规则。以订单表(Order)和订单明细表(OrdersDetails)这类一对多的关系表为例。
数据库建表脚本:
create table Orders ( id ,), OrderNo nvarchar(), TotalAmount ,), OrderTime datetime default getdate() ) create table OrdersDetails ( id ,), Orders_Id int, Product_Id int, ProductName nvarchar(), AddTime datetime default getdate() ) create table Product ( id ,), name nvarchar(), ) insert into Orders(OrderNo,TotalAmount) values(); insert into Orders(OrderNo,TotalAmount) values(); insert into Orders(OrderNo,TotalAmount) values(); insert into Orders(OrderNo,TotalAmount) values(); insert into Orders(OrderNo,TotalAmount) values(); insert into OrdersDetails(Orders_Id,Product_Id,ProductName) values(,,'Iphone8'); insert into OrdersDetails(Orders_Id,Product_Id,ProductName) values(,,'MI6'); insert into OrdersDetails(Orders_Id,Product_Id,ProductName) values(,,'HW7'); insert into OrdersDetails(Orders_Id,Product_Id,ProductName) values(,,'MZ'); insert into Product(Name) values('Iphone8'); insert into Product(Name) values('MI6'); insert into Product(Name) values('HW7'); insert into Product(Name) values('MZ');
总结的几个规则:
1.明细表的表明要用复数形式即 OrdersDetails
2.外键关系要 关联表名称_Id:Orders_Id,即使实体类是OrdersId也是去查找Orders_Id列
3.除了关联外键外其他字段最好用驼峰式命名,不要包含_或-
实体类和DbContext如下:
public class OrderManamgerDBContext : DbContext { public DbSet<Orders> Orders { get; set; } public DbSet<OrdersDetails> OrdersDetails { get; set; } public OrderManamgerDBContext() { } public OrderManamgerDBContext(string connectionString) : base(connectionString) { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new OrdersDetailsConfiguration()); base.OnModelCreating(modelBuilder); } } public class OrdersDetailsConfiguration : EntityTypeConfiguration<OrdersDetails> { public OrdersDetailsConfiguration() { //不是按照EF默认规则命名的需要手动映射 //HasEntitySetName("OrdersDetails"); //Property(t => t.OrdersId).HasColumnName("Orders_Id"); //Property(t => t.ProductId).HasColumnName("Product_Id"); } } public class Orders { public int id { get; set; } public string OrderNo { get; set; } public decimal TotalAmount { get; set; } public DateTime OrderTime { get; set; } public List<OrdersDetails> OrdersDetail { get; set; } } public class OrdersDetails { public int id { get; set; } public int Orders_Id { get; set; } public int Product_Id { get; set; } public string ProductName { get; set; } public DateTime AddTime { get; set; } }
如果实体类和数据表字段命名方式不一样就需要手动映射:
public class OrdersDetail { public int id { get; set; } public int OrdersId { get; set; } public int ProductId { get; set; } public string ProductName { get; set; } public DateTime AddTime { get; set; } }
这个时候就要把DbContext中的注释放开
控制台程序,采用积极加载方式:
class EFTest { static OrderManamgerDBContext odmdb = new OrderManamgerDBContext("DbContext"); //static OrderManamgerDBContext odmdb = new OrderManamgerDBContext(ConfigurationManager.ConnectionStrings["DbContext"].ConnectionString); public static void Main(string[] args) { ); //var rlt = odmdb.Orders.Where(od => od.id == 1); foreach(var itm in rlt) { Console.WriteLine("单据编号 "+itm.OrderNo + "\r\n明细产品:"); foreach (var citm in itm.OrdersDetail) { Console.WriteLine(citm.ProductName); } } string sql = rlt.ToString(); Console.Read(); } }
建议能按照默认规则设计就按照默认规则设计,EF的一个初衷就是减少工作量
EntityFramework默认映射规则的更多相关文章
- 使用Logstash创建ES映射模版并进行数据默认的动态映射规则
本文配置为 ELK 即(Elasticsearch.Logstash.Kibana)5.5.1. Elasticsearch 能够自动检测字段的类型并进行映射,例如引号内的字段映射为 String,不 ...
- SpringMVC注解汇总(二)-请求映射规则
接上一节SpringMVC注解汇总-定义 讲到Httpy请求信息 URL路径映射 1)普通URL路径映射 @RequestMapping(value={"/test1", &quo ...
- SpringMVC学习系列(3) 之 URL请求到Action的映射规则
在系列(2)中我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个action的url映射规则. 在系列(2)中我们在HelloWorldContr ...
- EntityFramework 实体映射到数据库
EntityFramework实体映射到数据库 在Entity Framework Code First与数据表之间的映射方式实现: 1.Fluent API映射 通过重写DbContext上的OnM ...
- SpringMVCURL请求到Action的映射规则
SpringMVC学习系列(3) 之 URL请求到Action的映射规则 在系列(2)中我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个acti ...
- Springboot学习02-webjars和静态资源映射规则
Springboot学习01-webjars和静态资源映射规则 前言 1-以前我们在IDEA中创建一个项目,添加web依赖包,我们现在是一个web应用,应该在man目录下面有一个webapp文件夹,将 ...
- 配置AutoMapper映射规则《转》
配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前,我们需要先进行映射规则的配置. public class Source { public int SomeVal ...
- go培训课程都学什么?xorm框架学习系列(二):xorm结构体映射规则和表操作
上节内容我们学习了基本的xorm框架的知识和基础配置的相关信息.本节课内容我们继续学习相关的知识和相关操作. 名称映射规则 名称映射规则主要负责结构体名称到表名和结构体field到表字段的名称映射. ...
- SpringCloud Zuul 路由映射规则配置
阅读目录 前言 快速入门 路由详解 Cookie与头信息 本地跳转 Hystrix和Ribbon支持 过滤器解释 动态加载 后记 回到目录 前言 本文起笔于2018-06-26周二,接了一个这周要完成 ...
随机推荐
- 文档对象模型(DOM),你只需知道这些就够了!
官方定义--应用程序编程接口(API) 文档对象模型是用于HTML和XML文档的应用程序编程接口,它定义文档的逻辑结构,以及访问和操作文档的方式. "The Document Object ...
- [解决方案]WebAPI+SwaggerUI部署服务器后,访问一直报错的问题
项目的背景:制作一批接口用来给前台app或者网站提供服务,因为WebApi是最近几年来比较流行和新颖的开发接口的方式,而且又属于轻型应用,所以选用它 部署的过程:建立了WebAPI项目并使用Swagg ...
- tideways+xhgui搭建php 7的性能测试环境
前言 我之前使用的是xhprof+xhgui分析线上环境的性能,然而PHP版本升级到PHP 7之后,xhprof已经不可用,于是改用tideways+xhgui,这实际上也是PHP7下开源方案的唯一选 ...
- c#常用快捷键
VS快捷键大全(总结了一些记忆的口诀) 原文转载至 https://www.cnblogs.com/liyunhua/p/4537054.html#top 谢谢大牛的分享! 相信.Net ...
- Python学习_11_类和实例
类和实例 类是对象创建实例的模板,而实例则是对象的实体.类使用class关键字定义: class MyClass: pass python中创建实例直接使用工厂函数(类名加上一对括号),和其他的 ...
- linux常用基本命令整理小结
linux系统遵循的基本原则 由目标单一的小程序组成,组合小程序完成复杂任务: 一切皆文件: 尽量避免捕捉用户接口: 配置文件保存为纯文本文件: Linux命令行常识 命令格式 命令+选项+参数 选项 ...
- Appium dmg 安装:[TypeError: Cannot read property 'replace' of undefined]
问题原因:appium dmg 版本没有默认node.js 解决方案:安装稳定版的node.js.(官网下载安装即可.) 验证:命令行输入:node -v 查看版本号 npm -v 查看版本号
- mysql安装及常见使用
mysql的安装和使用 说明:mysql是一个多线程,多用户的sql数据库,有着高性能,高可靠性,易于实用性等特点. 安装的软件链接:https://pan.baidu.com/s/1smRLkoX ...
- C和Lua之间的相互调用
前面的话 第一次接触Lua是因为Unity游戏中需要热更,但是一直没搞懂Lua是怎么嵌入到别的语言中执行的,如何互相调用的.这次打算好好了解一下C跟lua是如何交互的 那么如何使用Lua语言? lua ...
- 支付宝pc网页支付
本文讲解如何在pc网页上完成支付宝的支付功能, 详细讲解了支付宝的配置信息,项目如何使用配置信息等, 本项目中代码可以直接运行, 也可以将代码迁移至你自己的项目中直接使用. 注意: 下面讲解的功能只能 ...