zoukankan      html  css  js  c++  java
  • C# ORM—Entity Framework 之Database first(数据库优先)&Model First(模型优先)(一)

    一、什么是Entity Framework

      1.1 实体框架EF是一个对象关系映射器,使.NET开发人员使用特定于域的对象关系数据它消除了需要开发人员通常需要编写大部分数据访问代码。简化了原有的ado.net 数据访问方式。 ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

      1.2 在C#中常用的ORM框架有:

         1.NHibernate (从java的Hibernate延伸过来)
         2.Linq to SQL类 (只针对MSSQL数据库的)
         3.Entity FrameWork(微软的一个开源的ORM,可以针对多种主流数据库(如MSSQL、MySql、Oracle等))

      1.3 本文暂时编写关于Entity Framework文章,后续有时间会补充NHibernate,Linq to SQL系列文章。

    二、Entity Framework Database first(数据库优先)使用过程

      2.1 建立数据库

        2.1.1 建立表Blogs

    1 CREATE TABLE [dbo].[Blogs] (
    2     [BlogId] INT          NOT NULL,
    3     [Name]   VARCHAR (50) NULL,
    4     [Url]    VARCHAR (50) NULL,
    5     PRIMARY KEY CLUSTERED ([BlogId] ASC)
    6 );
    View Code

        2.1.2 建立表Posts

    1 CREATE TABLE [dbo].[Posts]
    2 (
    3     [PostId] INT NOT NULL PRIMARY KEY, 
    4     [Title] VARCHAR(50) NULL, 
    5     [Content] VARCHAR(50) NULL, 
    6     [BlogId] INT NULL, 
    7     CONSTRAINT [FK_Posts_ToBlogs] FOREIGN KEY (BlogId) REFERENCES [Blogs](BlogId) 
    8 )
    View Code

      2.2 建立项目

        2.2.1 新建一个控制台项目
        2.2.1 添加—》新建项—》数据—》ADO.NET实体数据模型—》添加—》从数据库生成—》下一步—》新建连接(连接设置刚刚自己使用的数据库)—》下一步—》选中自己要使用的表,以及视图。存储过程等—》完成

      2.3 使用(个人建立的实体数据名称为:BloggingModel)

        2.3.1 文件简介
          App.config :配置文件,此文件已包含实体数据的数据库链接等基本信息

    1 <connectionStrings>
    2     <add name="BloggingContext" connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)v11.0;initial catalog=DatabaseFirst.Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    3   </connectionStrings>

          BloggingModel.Context.cs:实体数据模型的上下文(BloggingModel.Context.tt下)

          BloggingModel.tt:这个下面包含了 具体的实体(也就是以数据库表为单位的类)

        2.3.2 编写基本测试程序

     1             using (var db = new BloggingContext())
     2             {
     3                 Console.WriteLine("输入一个新的Blog名称");
     4                 var name = Console.ReadLine();
     5 
     6                 var blog = new Blogs {Name=name };
     7                 db.Blogs.Add(blog);
     8                 db.SaveChanges();
     9 
    10                 var query = from b in db.Blogs
    11                             orderby b.Name
    12                             select b;
    13                 foreach (var item in query)
    14                 {
    15                     Console.WriteLine(item.Name);
    16                 }
    17                 Console.ReadKey();
    18             }
    View Code

        至此基本使用结束

      2.4 扩展使用

        2.4.1 增加数据库表(Users)

    1 CREATE TABLE [dbo].[Users] (
    2     [Username]     NVARCHAR (128) NOT NULL,
    3     [display_name] NVARCHAR (MAX) NULL,
    4     CONSTRAINT [PK_dbo.Users] PRIMARY KEY CLUSTERED ([Username] ASC)
    5 );
    View Code

        2.4.2 更新实体数据模型

          双击打开BloggingModel.edmx—》空白处,右键单击—》从数据库更新模型—》选中要添加的数据表即可(此时也可以执行删除表)。

    三、Entity Framework Model first(模型优先)使用过程

      3.1 新建项目

        新建一个控制台项目即可

       3.2 新建实体数据模型

        添加—》新建项—》数据—》ADO.NET实体数据模型—》空模型—》完成

       3.3 添加实体模型(打开BloggingModel.edmx)

        3.3.1 修改“实体容器名称”:在BloggingModel.edmx中,空白处右键单击—》属性—》实体容器名称—》(修改成自己想要的名称) 

        3.3.2 添加实体       

          在BloggingModel.edmx中,空白处右键单击—》新增—》实体—》确定         
          
    填写实体名称,修改实体集名称(这个是数据库表名称),以及修改属性名       
          再在此实体上,右键单击—》新增—》标量属性,这里增加自己想要的字段即可,以及对此字段的属性修改。

          同理即可新增多个实体

        3.3.3 添加关系       
          在BloggingModel.edmx中,空白处右键单击—》新增—》关联—》设置自己想要的关联关系—》确定

      3.4 生成数据库

        3.4.1 在BloggingModel.edmx中,空白处右键单击—》根据模型生成数据库—》新建连接(设置好数据库连接)—》确定—》下一步(这时会生成sql语句代码)—》完成。

        3.4.2 打开SQL代码文件,右键—》连接—》连接自己上文创建的数据库即可—》执行SQL代码即可,查看数据库。至此模型优先基本完成

      3.5 文件说明简介

        App.config:配置文件:包含了数据库连接语句

    1 <connectionStrings>
    2     <add name="BloggingContext" connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)v11.0;initial catalog=ModelFirst.Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    3   </connectionStrings>
    View Code

        BloggingModel.Context.cs:实体上下文类

        Bloggingmodel.tt:下包含了数据实体类(也就是以数据库表为单位的实体类)

      3.6 基本测试代码

     1             Console.WriteLine("请输入一个Blogs名称");
     2             var name = Console.ReadLine();
     3 
     4             using(var db=new BloggingContext()) 
     5             {
     6                 var blog = new Blog { Name = name };
     7                 db.Blogs.Add(blog);
     8                 db.SaveChanges();
     9 
    10                 var query = from b in db.Blogs
    11                             orderby b.Name
    12                             select b;
    13                 foreach (var item in query)
    14                 {
    15                     Console.WriteLine(item.Name);
    16                 }
    17                 Console.ReadKey();
    18             }
    View Code

      3.7 扩展应用—模型修改

        3.7.1 打开BloggingModel.edmx,空白处右键—》新增—》实体(设置好要增加的实体)—》确定。

        3.7.2 打开BloggingModel.edmx,空白处右键—》根据模型生成数据库—》完成(会有一个覆盖旧文件的警告)

        3.7.3 打开重新生成的SQL语句,右键—》执行即可,查看数据库表。(此步可能会使已生成好的数据库数据,表结构发生改变,谨慎操作)

        至此,基本介绍完成。   


          

  • 相关阅读:
    Rest
    docker-4
    Arrays.asList
    docker-3
    docker
    docker
    linux-ss
    jackson
    Java将图片的路径转为Base64,VUE前端显示
    java base64视频存到本地或服务器
  • 原文地址:https://www.cnblogs.com/bjlhx/p/3174864.html
Copyright © 2011-2022 走看看