初探EntityFramework——实体类结构映射
实体类与数据表的映射有一套专用的规则。Code First 采用的惯例优于预先设置的设计,在没有任何设置的情况下,自动检测模型结构并推导出默认设置以简化类的设计,因此不需要特别设置类的属性即可完成模型设计。
例如,当DbContext的模型类中定义了DbSet<Product>属性时, 按照惯例会以复数类名称为映射的数据表名称,因为Product自动映射到Products数据表。
而Product中的属性则逐一映射到Products数据表中的同名数据字段,比如Product类如下所示:
public class Product
{public int Id {get;set;}public string Name {get;set;}public int Price {get;set;}public string Category {get;set;}
}
其中名称为Id的属性(不区分大小写,Id与ID效果相同)自动成为主键,类名+Id的属性 名称同样会被推断为主键,例如ProductId
EntityFramework同样会在映射过程中自动推导出类属性与数据字段的映射类型,如下图所示:
SQL Server Database Engine type | .NET Framework type |
image,timestamp | Byte[] |
bigint | Int64 |
int | Int32 |
float | Double |
bit | Boolean |
char,nchar,ntext,varchar,nvarchar,text | String/Char[] |
date,datetime,datetime2 | DateTime |
decimal,numeric,money | Decimal |
time | TimeSpan |
uniqueidentifier | Guid |
注意:主键属性映射字段不允许为Null,基本类型(比如int 类型)属性映射的字段也不允许是Null,其他类型属性(比如string)映射的字段均允许是Null.
Product类映射到数据库的表结构如下图所示:
更多信息,请参考微软MSDN官方说明:EF微软官方文档
后续补充
SQL Server类型目录 | SQL Server类型 | .NET类型 | C# 关键字 |
准确数字型 | bit | system.Boolean | bool |
tinyint | system.Byte | byte | |
smallint | system.Int16 | short | |
int | system.Int32 | int | |
bigint | system.Int64 | long | |
smallmoney、money、decimal、numeric | system.Decimal | decimal | |
近似数字类型 | real | system.Deciaml | float |
float | system.Double | double | |
字符串类型 | char、varchar、text | system.String | string |
nchar、varchar、ntext | system.String | string | |
二进制字符串类型 | binary、varbinary | system.Byte[] | byte[] |
image | system.Byte[] | byte[] | |
rowversion(timestamp) | system.Byte[] | byte[] | |
日期类型 | date | system.DateTime | |
time | system.TimeSpan | ||
small datetime、datetime、datetime2 | system.DateTime | ||
datetimeoffest | system.DateTimeOffset | ||
其他类型 | hierarchyid | No built-in mapping or support | |
xml | system.String | string | |
uniqueidentifier | system.Guid | ||
sql_variant | No bulit-in mapping or support |
初探EntityFramework——实体类结构映射相关推荐
- 问题记录:EntityFramework 一对一关系映射
EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher {public int Id { get; set; }p ...
- mysql test 映射到实体_MyBatis实体关系映射
作者:知了汇智-刘阳 MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能.下面我们就来介绍一下如何使用MyBatis的实体关系映射1.MyB ...
- Hibernate 实体关联关系映射----总结
http://lavasoft.blog.51cto.com/62575/39398 Hibernate 实体关联关系映射----总结 花了三天的业余时间,终于写完了Hibernate关联关系映射的所 ...
- 【Hibernate】Hibernate实体关系映射实例解析
//刘梦冰发表于2015-6-18 1.使用XML配置 Cat.java(实体类) public classCat {private Integerid;private Stringname;priv ...
- EntityFramework 实体拆分与表拆分
摘录自https://msdn.microsoft.com/zh-cn/data/jj591617 * 将实体类型的 CLR 属性映射到数据库中的多个表(实体拆分) 实体拆分允许一个实体类型的属性分散 ...
- 初探EntityFramework——来自数据库的Code First
Entity Framkwork从第二版(EF4)开始,支持新的CodeFirst模式(程序代码优先),以自定义类定义数据模型.简化了EF的开发过程.本文章使用简单的示例来说明如何使用来自数据库的Co ...
- 追根溯源:EntityFramework 实体的状态变化
阅读目录: 1. 应用场景 2. 场景测试 3. 问题分析 4. 追根溯源 5. 简要总结 1. 应用场景 首先,应用程序使用 EntityFramework,应用场景中有两个实体 S_Class(班 ...
- EntityFramework实体框架—反向工程(实体类生成)
文章目录 前言 1. Entity Framework Core反向工程定义 2.实现工作原理 3.准备工作 4. 编写命令 前言 Entity Framework Core 是适用于 .NET 的新 ...
- 【Hibernate】Hibernate实体关系映射——单边的一对一关系
//刘梦冰发表于2015-6-19 一对对一关系的情况要多一些,不仅在POJO层体现为一对一的,还要保证数据库中的关系是一对一的,不允许出现一个表的两行记录共用另一个表中同一行记录的情况.这可以通过设 ...
最新文章
- 东软村医管理平台_软件定义汽车“性感”吗?东软睿驰有自己的答案
- 解决eclipse编译的几种方法
- C++ Primer 第9章 顺序容器 第一次学习笔记
- 在UltraEdit的查找和替换中使用正则表达式 (转)
- SpringCloud Zuul(一)之介绍
- MySQL的mysql_insert_id和LAST_INSERT_ID
- 吴恩达机器学习作业(1):线性回归
- 产生式是蕴含式_独栋别墅~下沉式庭院设计
- JS-面向对象-创建具有私有属性的构造函数(2种方法)
- JavaScript表单基本验证
- 基于JavaWeb的小型超市管理系统的设计与实现
- 轻松调整C盘分区大小
- C++11介绍之vector::push_back和vector::emplace_back区别
- Unmatched braces in the pattern
- Colorful Slimes( UPC 5594: 二维dp+思维)
- 设置webhook_数据采集教程_智能模式_如何设置Webhook功能_后羿采集器
- 【机器学习】横向联邦学习纵向联邦学习区别
- 深度强化学习下移动机器人导航避障
- JavaScript 实现 HTMLDecode
- java 又一次抛出异常 相关处理结果演示样例代码
热门文章
- PHP5.5四种序列化性能对比
- 艾伟:WCF从理论到实践(2):决战紫禁之巅
- 淘宝山寨IOS sdk
- laravel 集成采集_新版2020 Laravel采集网站程序
- 多麦克风做拾音的波束_麦克风丨人声应该用动圈话筒还是电容话筒?
- SecureCRT配置前--Linux网卡设置
- python 程序停止打印日志_Python日志打印
- 运行时错误7内存溢出_C++程序运行时的内存模型
- she is so css什么意思,输入she is so什么意思 微信she is so什么梗
- java 视图解析器_SpringMVC——视图和视图解析器