前言
最近项目中用到了EF,初次接触,使用了基本的增删改查。而对于EF底层的原理,却没有了解的透彻。俗话说,知其然,还要知其所以然。
一、EF和ORM
ORM(Object-Relational-Mapping)对象关系映射,是将关系型数据库的表关系映射成面向对象中的对象模型。EF是将表实体的变化,映射到数据表的变化。
注意:ORM框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中
二、EF如何实现ORM
EF是通过xml的方式实现映射的。这里采用DBFirst的方式生成EF实体模型,即Model1.edmx.使用xml编辑器打开,如图:
分为三层:存储层SSDL、概念层CSDL、映射层C-S
存储层SSDL代码示例:
<edmx:StorageModels>
<Schema Namespace="Model1.Store" Provider="Oracle.ManagedDataAccess.Client" ProviderManifestToken="12.1" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
<EntityType Name="DEPTINFO">
<Key>
<PropertyRef Name="DEPTINFONO" />
</Key>
<Property Name="DEPTINFONO" Type="varchar2" MaxLength="32" Nullable="false" />
<Property Name="deptname" Type="varchar2" MaxLength="32" />
<Property Name="deptnumber" Type="number" Precision="38" Scale="0" />
<Property Name="deptboss"