ADO.NET Entity Framework通过Modeel First和DataBase First,提供了几个把数据库表映射到对象上的曾。通过Database First,可以从一个数据库架构开始,使用Visual Studio 项模版创建完整映射。还可以先用设计器(Model First)设计实体类,再把它映射到数据库上,在该数据库中,表和表之间的关系可以有完全不同的结构。
需要定义的层如下:
1、逻辑层--该层定义关系数据
2、概念层--该层定义.NET类
3、映射层--该层定义从.NET类到关系表和关系的映射。

(1)逻辑层--逻辑层由SSDL(存储架构定义语言定义,描述数据库表及其关系的结构。)
?<edmx:StorageModels> ????? <Schema Namespace="ExtjsmvcModel.Store" Alias="Self" Provider="System.Data.sqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl"> ??????? <EntityContainer Name="ExtjsmvcModelStoreContainer"> ????????? <EntitySet Name="beian" EntityType="ExtjsmvcModel.Store.beian" store:Type="Tables" Schema="dbo" /> ????????? <EntitySet Name="Menu" EntityType="ExtjsmvcModel.Store.Menu" store:Type="Tables" Schema="dbo" /> ????????? <EntitySet Name="Users" EntityType="ExtjsmvcModel.Store.Users" store:Type="Tables" Schema="dbo" /> ??????? </EntityContainer> ??????? <EntityType Name="beian"> ????????? <Key> ??????????? <PropertyRef Name="ID" /> ????????? </Key> ????????? <Property Name="ID" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> ????????? <Property Name="kehu_name" Type="varchar" MaxLength="50" /> ????????? <Property Name="beianhao" Type="varchar" MaxLength="100" /> ????????? <Property Name="beianpass" Type="varchar" MaxLength="100" /> ????????? <Property Name="beianemail" Type="varchar" MaxLength="100" /> ????????? <Property Name="emailpass" Type="varchar" MaxLength="100" /> ????????? <Property Name="beianzh" Type="varchar" MaxLength="100" /> ????????? <Property Name="beianzhpa" Type="varchar" MaxLength="100" /> ??????? </EntityType> ??????? <EntityType Name="Menu"> ????????? <Property Name="Menuname" Type="varchar" MaxLength="100" /> ????????? <Property Name="ParentID" Type="int" /> ????????? <Property Name="cls" Type="varchar" MaxLength="100" /> ??????? <EntityType Name="Users"> ??????????? <PropertyRef Name="UserId" /> ????????? <Property Name="UserId" Type="int" Nullable="false" /> ????????? <Property Name="UserName" Type="varchar" MaxLength="100" /> ????????? <Property Name="UserPwd" Type="varchar" MaxLength="100" /> ????? </Schema> ??? </edmx:StorageModels>
(2)概念层(定义.NET类)该层用CSDL--概念架构定义语言定义。
<edmx:ConceptualModels> ????? <Schema Namespace="ExtjsmvcModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm"> ??????? <EntityContainer Name="ExtjsmvcEntities" annotation:LazyLoadingEnabled="true"> ????????? <EntitySet Name="beian" EntityType="ExtjsmvcModel.beian" /> ????????? <EntitySet Name="Menu" EntityType="ExtjsmvcModel.Menu" /> ????????? <EntitySet Name="Users" EntityType="ExtjsmvcModel.Users" /> ????????? <Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" /> ????????? <Property Name="kehu_name" Type="String" MaxLength="50" Unicode="false" FixedLength="false" /> ????????? <Property Name="beianhao" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="beianpass" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="beianemail" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="emailpass" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="beianzh" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="beianzhpa" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="Menuname" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="ParentID" Type="Int32" /> ????????? <Property Name="cls" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="UserId" Type="Int32" Nullable="false" /> ????????? <Property Name="UserName" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ????????? <Property Name="UserPwd" Type="String" MaxLength="100" Unicode="false" FixedLength="false" /> ??? </edmx:ConceptualModels>
(3)映射层(映射层使用MSL--映射规范语言 把CSDL中的实体类型定义映射到SSDL中)
<edmx:Mappings> ????? <Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs"> ??????? <EntityContainerMapping StorageEntityContainer="ExtjsmvcModelStoreContainer" CdmEntityContainer="ExtjsmvcEntities"> ????????? <EntitySetMapping Name="beian"> ??????????? <EntityTypeMapping TypeName="ExtjsmvcModel.beian"> ????????????? <MappingFragment StoreEntitySet="beian"> ??????????????? <ScalarProperty Name="ID" ColumnName="ID" /> ??????????????? <ScalarProperty Name="kehu_name" ColumnName="kehu_name" /> ??????????????? <ScalarProperty Name="beianhao" ColumnName="beianhao" /> ??????????????? <ScalarProperty Name="beianpass" ColumnName="beianpass" /> ??????????????? <ScalarProperty Name="beianemail" ColumnName="beianemail" /> ??????????????? <ScalarProperty Name="emailpass" ColumnName="emailpass" /> ??????????????? <ScalarProperty Name="beianzh" ColumnName="beianzh" /> ??????????????? <ScalarProperty Name="beianzhpa" ColumnName="beianzhpa" /> ????????????? </MappingFragment> ??????????? </EntityTypeMapping> ????????? </EntitySetMapping> ????????? <EntitySetMapping Name="Menu"> ??????????? <EntityTypeMapping TypeName="ExtjsmvcModel.Menu"> ????????????? <MappingFragment StoreEntitySet="Menu"> ??????????????? <ScalarProperty Name="Menuname" ColumnName="Menuname" /> ??????????????? <ScalarProperty Name="ParentID" ColumnName="ParentID" /> ??????????????? <ScalarProperty Name="cls" ColumnName="cls" /> ????????? <EntitySetMapping Name="Users"> ??????????? <EntityTypeMapping TypeName="ExtjsmvcModel.Users"> ????????????? <MappingFragment StoreEntitySet="Users"> ??????????????? <ScalarProperty Name="UserId" ColumnName="UserId" /> ??????????????? <ScalarProperty Name="UserName" ColumnName="UserName" /> ??????????????? <ScalarProperty Name="UserPwd" ColumnName="UserPwd" /> ??????? </EntityContainerMapping> ????? </Mapping> ??? </edmx:Mappings>
用设计器和CSDL创建的实体类一般派生自基类EntityObject。
例如Users类派生自基类EntityObject,并为其数据定义属性,如UserName。这些属性的set访问器以两种不同的方式触发信息的改变:
一种方式是调用EntityObject基类的ReportPropertyChanging()和ReportPropertyChanged()方法。调用这些方法会使用INotifyProperty Changing和INotifyPropertyChanged接口,以通知每个客户端用这些接口的事件来注册。
另一种方式使用用部分方法,如OnTitleChanging()和OnTitleChanged()。他们默认没有实现方式,但可以在这个类的自定义扩展中实现他们。
?
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|