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周二,接了一个这周要完成 ...
随机推荐
- deepin系统下安装git
1.打开命令行 2.输入 sudo apt-get update sudo apt-get install git 3.显示 建议安装: git-daemon-run | git-daemon-sys ...
- python logging一个通用的使用模板
import os import logbook from logbook.more import ColorizedStderrHandler from functools import wraps ...
- 房上的猫:if选择结构
一.基本if结构: 1.定义:if选择结构是根据条件判断之后再做处理的一种语法结构! 2.逻辑:首先对条件进行判断 >如果为真,则执行代码块 >如果为假,执行代码块后面的部分二.常用逻 ...
- 读书笔记:《HTML5开发手册》-- 现存元素的变化
继续学习HTML5语义化的内容,今天主要介绍一下,HTML5之前的元素经HTML5规范后的语义及一些使用示例. 一.cite HTML5对cite元素的定义进行了很大的修改,在HTML4中,cite元 ...
- MSSQLSERVER并行度
Microsoft SQL Server最大并行度(MAXDOP) 配置选项控制并行计划用于执行查询的处理器的数目.此选项确定用于执行工作并行查询计划运算符的计算和线程资源.根据是否 SQL Serv ...
- 利用Service Fabric承载eShop On Containers
从模块化到微服务化 从Pet Shop 到eShop on Container都是Microsoft在技术演进的路径上给开发者展示.Net的开发能力和架构能力的Sample工程,Petshop的时候更 ...
- Xposed hook布局类资源文件的获取
如题,可以hook状态栏,为系统状态栏添加一个TextView @Override public void handleInitPackageResources(XC_InitPackageResou ...
- MicroPython教程之TPYBoard v102 CAN总线通信
0x00前言 CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是ISO国际标准化的串行通信协议.CAN总线结构简单,只需2根线与外部相连,并且内部集成了错误探测和管 ...
- JavaScript Html页面加载完成
//一.Html页面加载完成的JS写法 //1. $(function () { alert("窗体Html页面加载完成方法一"); }); //2. $(document ...
- Flask基础
简介 Flask是当下流行的Web框架,它是用Python实现的.Flask显著的特点是:它是一个“微”框架.”微”意味着Flask旨在保持核心的简单,但同时又易于扩展.默认情况下,Flask 不包含 ...