运维开发网

实体框架生成数据库第一模式

运维开发网 https://www.qedev.com 2022-08-01 19:52 出处:网络
本文详细讲解了Entity?Framework生成DataBase?First模式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 一、新建控制台应用程序,然后右键-gt;添加新建项

本文详细讲解了Entity?Framework生成DataBase?First模式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 一、新建控制台应用程序,然后右键-gt;添加新建项,选择数据里面的实体数据模型:


然后单击添加。

二、选择来自数据库的EF设计器,并点击下一步


三、在实体数据模型向导界面选择要使用的数据连接,或者点击新建连接按钮创建新的连接,这里选择已有的连接,并点击下一步:


四、选择实体框架6.0,点击下一步:


五、选择要操作的表,并点击完成:


六、查看生成的项目结构


自动添加了对EntityFramework的引用。同时,项目的根目录下会生成一个包文件夹:


包文件夹存储与EntityFramework相关的文档:


生成的配置文件:


在ConfigSections节点中,节的名称是entityFramework,下面节点的名称是节名称的值。如果要在其他地方使用EF的配置信息,需要复制所有三个节点:configSections、connectionStrings和entityFramework,configSections节点在所有节点的前面。

七、查看生成的edmx文件1、查看.tt下面的文件


对应于数据库表的实体类是在。tt的文件,而且是正式的。

2、查看.edmx文件

右键单击edmx文件选择打开模式,并选择XML(文本)编辑器模式打开它:


该文件的整体结构如下:

lt;xml version="1.0" encoding="utf-8"gt;lt;edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx"gt; lt;!-- EF Runtime content --gt; lt;edmx:Runtimegt; lt;!-- SSDL content --gt; lt;edmx:StorageModelsgt; lt;Schema Namespace="StudentSystemModel.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2012" 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"gt; lt;EntityType Name="Student"gt; lt;Keygt; lt;PropertyRef Name="StudentID" /gt; lt;/Keygt; lt;Property Name="StudentID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" /gt; lt;Property Name="StudentName" Type="varchar" MaxLength="16" /gt; lt;Property Name="Sex" Type="varchar" MaxLength="8" /gt; lt;Property Name="Age" Type="int" /gt; lt;Property Name="Major" Type="varchar" MaxLength="32" /gt; lt;Property Name="Email" Type="varchar" MaxLength="32" /gt; lt;/EntityTypegt; lt;EntityContainer Name="StudentSystemModelStoreContainer"gt; lt;EntitySet Name="Student" EntityType="Self.Student" Schema="dbo" store:Type="Tables" /gt; lt;/EntityContainergt; lt;/Schemagt; lt;/edmx:StorageModelsgt; lt;!-- CSDL content --gt; lt;edmx:ConceptualModelsgt; lt;Schema Namespace="StudentSystemModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"gt; lt;EntityType Name="Student"gt; lt;Keygt; lt;PropertyRef Name="StudentID" /gt; lt;/Keygt; lt;Property Name="StudentID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" /gt; lt;Property Name="StudentName" Type="String" MaxLength="16" FixedLength="false" Unicode="false" /gt; lt;Property Name="Sex" Type="String" MaxLength="8" FixedLength="false" Unicode="false" /gt; lt;Property Name="Age" Type="Int32" /gt; lt;Property Name="Major" Type="String" MaxLength="32" FixedLength="false" Unicode="false" /gt; lt;Property Name="Email" Type="String" MaxLength="32" FixedLength="false" Unicode="false" /gt; lt;/EntityTypegt; lt;EntityContainer Name="StudentSystemEntities" annotation:LazyLoadingEnabled="true"gt; lt;EntitySet Name="Students" EntityType="Self.Student" /gt; lt;/EntityContainergt; lt;/Schemagt; lt;/edmx:ConceptualModelsgt; lt;!-- C-S mapping content --gt; lt;edmx:Mappingsgt; lt;Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs"gt; lt;EntityContainerMapping StorageEntityContainer="StudentSystemModelStoreContainer" CdmEntityContainer="StudentSystemEntities"gt; lt;EntitySetMapping Name="Students"gt; lt;EntityTypeMapping TypeName="StudentSystemModel.Student"gt; lt;MappingFragment StoreEntitySet="Student"gt; lt;ScalarProperty Name="StudentID" ColumnName="StudentID" /gt; lt;ScalarProperty Name="StudentName" ColumnName="StudentName" /gt; lt;ScalarProperty Name="Sex" ColumnName="Sex" /gt; lt;ScalarProperty Name="Age" ColumnName="Age" /gt; lt;ScalarProperty Name="Major" ColumnName="Major" /gt; lt;ScalarProperty Name="Email" ColumnName="Email" /gt; lt;/MappingFragmentgt; lt;/EntityTypeMappinggt; lt;/EntitySetMappinggt; lt;/EntityContainerMappinggt; lt;/Mappinggt; lt;/edmx:Mappingsgt; lt;/edmx:Runtimegt; lt;!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) --gt; lt;Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx"gt; lt;Connectiongt; lt;DesignerInfoPropertySetgt; lt;DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" /gt; lt;/DesignerInfoPropertySetgt; lt;/Connectiongt; lt;Optionsgt; lt;DesignerInfoPropertySetgt; lt;DesignerProperty Name="ValidateOnBuild" Value="true" /gt; lt;DesignerProperty Name="EnablePluralization" Value="true" /gt; lt;DesignerProperty Name="IncludeForeignKeysInModel" Value="true" /gt; lt;DesignerProperty Name="UseLegacyProvider" Value="false" /gt; lt;DesignerProperty Name="CodeGenerationStrategy" Value="无" /gt; lt;/DesignerInfoPropertySetgt; lt;/Optionsgt; lt;!-- Diagram content (shape and connector positions) --gt; lt;Diagramsgt;lt;/Diagramsgt; lt;/Designergt;lt;/edmx:Edmxgt;

其中SSDL内容定义了数据库表的结构:


CSDL内容定义了实体类的结构:


C-S映射内容定义了实体类和数据库表之间的映射关系:


从C-S映射内容节点可以看出EF为什么会自动生成实体类,或者说为什么可以通过实体类操纵数据库数据。

从这里可以看出,EF做的第一件事就是取数据库的数据表结构,生成实体类,自动建立表和实体的映射关系。

3、StudentManager.tt是T4模板,是用来生成实体类的模板。

T4模板:从edmx中获取数据结构,根据模板生成相应格式的实体类。

4、StudentManager.Context.cs文件//------------------------------------------------------------------------------// lt;auto-generatedgt;// 此代码已从模板生成。//// 手动更改此文件可能导致应用程序出现意外的行为。// 如果重新生成代码,将覆盖对此文件的手动更改。// lt;/auto-generatedgt;//------------------------------------------------------------------------------namespace EFDbFirstDemo{ using System; using System.Data.Entity; using System.Data.Entity.Infrastructure; public partial class StudentSystemEntities : DbContext { public StudentSystemEntities() : base("name=StudentSystemEntities") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } public Virtual DbSetlt;Studentgt; Students { get; set; } }}

StudentSystemEntities继承自DbContext,用于操作数据库。

这就是这篇关于实体框架生成数据库第一模式的文章。希望对大家的学习有帮助

0

精彩评论

暂无评论...
验证码 换一张
取 消