实体类与数据表的映射有一套专用的规则。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同样会在映射过程中自动推导出类属性与数据字段的映射类型,如下图所示:

SQLServer 与.NET 数据类型
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微软官方文档


后续补充

一份更具体的数据类型与.NET类型匹配情况表
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——实体类结构映射相关推荐

  1. 问题记录:EntityFramework 一对一关系映射

    EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher {public int Id { get; set; }p ...

  2. mysql test 映射到实体_MyBatis实体关系映射

    作者:知了汇智-刘阳 MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能.下面我们就来介绍一下如何使用MyBatis的实体关系映射1.MyB ...

  3. Hibernate 实体关联关系映射----总结

    http://lavasoft.blog.51cto.com/62575/39398 Hibernate 实体关联关系映射----总结 花了三天的业余时间,终于写完了Hibernate关联关系映射的所 ...

  4. 【Hibernate】Hibernate实体关系映射实例解析

    //刘梦冰发表于2015-6-18 1.使用XML配置 Cat.java(实体类) public classCat {private Integerid;private Stringname;priv ...

  5. EntityFramework 实体拆分与表拆分

    摘录自https://msdn.microsoft.com/zh-cn/data/jj591617 * 将实体类型的 CLR 属性映射到数据库中的多个表(实体拆分) 实体拆分允许一个实体类型的属性分散 ...

  6. 初探EntityFramework——来自数据库的Code First

    Entity Framkwork从第二版(EF4)开始,支持新的CodeFirst模式(程序代码优先),以自定义类定义数据模型.简化了EF的开发过程.本文章使用简单的示例来说明如何使用来自数据库的Co ...

  7. 追根溯源:EntityFramework 实体的状态变化

    阅读目录: 1. 应用场景 2. 场景测试 3. 问题分析 4. 追根溯源 5. 简要总结 1. 应用场景 首先,应用程序使用 EntityFramework,应用场景中有两个实体 S_Class(班 ...

  8. EntityFramework实体框架—反向工程(实体类生成)

    文章目录 前言 1. Entity Framework Core反向工程定义 2.实现工作原理 3.准备工作 4. 编写命令 前言 Entity Framework Core 是适用于 .NET 的新 ...

  9. 【Hibernate】Hibernate实体关系映射——单边的一对一关系

    //刘梦冰发表于2015-6-19 一对对一关系的情况要多一些,不仅在POJO层体现为一对一的,还要保证数据库中的关系是一对一的,不允许出现一个表的两行记录共用另一个表中同一行记录的情况.这可以通过设 ...

最新文章

  1. 东软村医管理平台_软件定义汽车“性感”吗?东软睿驰有自己的答案
  2. 解决eclipse编译的几种方法
  3. C++ Primer 第9章 顺序容器 第一次学习笔记
  4. 在UltraEdit的查找和替换中使用正则表达式 (转)
  5. SpringCloud Zuul(一)之介绍
  6. MySQL的mysql_insert_id和LAST_INSERT_ID
  7. 吴恩达机器学习作业(1):线性回归
  8. 产生式是蕴含式_独栋别墅~下沉式庭院设计
  9. JS-面向对象-创建具有私有属性的构造函数(2种方法)
  10. JavaScript表单基本验证
  11. 基于JavaWeb的小型超市管理系统的设计与实现
  12. 轻松调整C盘分区大小
  13. C++11介绍之vector::push_back和vector::emplace_back区别
  14. Unmatched braces in the pattern
  15. Colorful Slimes( UPC 5594: 二维dp+思维)
  16. 设置webhook_数据采集教程_智能模式_如何设置Webhook功能_后羿采集器
  17. 【机器学习】横向联邦学习纵向联邦学习区别
  18. 深度强化学习下移动机器人导航避障
  19. JavaScript 实现 HTMLDecode
  20. java 又一次抛出异常 相关处理结果演示样例代码

热门文章

  1. PHP5.5四种序列化性能对比
  2. 艾伟:WCF从理论到实践(2):决战紫禁之巅
  3. 淘宝山寨IOS sdk
  4. laravel 集成采集_新版2020 Laravel采集网站程序
  5. 多麦克风做拾音的波束_麦克风丨人声应该用动圈话筒还是电容话筒?
  6. SecureCRT配置前--Linux网卡设置
  7. python 程序停止打印日志_Python日志打印
  8. 运行时错误7内存溢出_C++程序运行时的内存模型
  9. she is so css什么意思,输入she is so什么意思 微信she is so什么梗
  10. java 视图解析器_SpringMVC——视图和视图解析器