初探EntityFramework——实体类结构映射

实体类与数据表的映射有一套专用的规则。Code First 采用的惯例优于预先设置的设计,在没有任何设置的情况下,自动检测模型结构并推导出默认设置以简化类的设计,因此不需要特别设置类的属性即可完成模型设计。

例如,当DbContext的模型类中定义了DbSet属性时, 按照惯例会以复数类名称为映射的数据表名称,因为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类映射到数据库的表结构如下图所示:

                                      初探EntityFramework——实体类结构映射_第1张图片

 

 更多信息,请参考微软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  

 

 

 

 

 

 

你可能感兴趣的:(Entity,Framework学习)