zoukankan      html  css  js  c++  java
  • .NET Core学习笔记(8)——Entity Framework Core之Database First

    曾经我以为再也不会去弄啥Database First,然鹅我错了。这个世界上就是有啪啪打脸和真香的时候。当小伙伴拿着做好的DB表结构和SQL脚本递过来的时候,我知道我没法拒绝。望着他突起的肱二头肌和充满杀意的脸庞,我怎能忍心说,来来来,我们Code First一把……
    DB First嘛,首先我们要确保本地有DB才行,本篇我们使用免费的SQL Server LocalDB来举例。LocalDB可以从MSDN下载安装包,也可以直接通过Visual Studio安装。

    安装完成后,我们使用Visual Studio来连接LocalDB(当然也可以下载更强大的SQL Sever Management Studio)。首先我们打开Visual Studio的View -> SQL Server Object Explorer。默认应该已经连接到LocalDB了,如果没有可以通过顶层节点右键菜单Add SQL Server来手动操作。

    我们通过以下SQL语句在master库创建一张测试用的表。

    CREATE TABLE [dbo].[Todoes] (
        [ID]          INT            IDENTITY (1, 1) NOT NULL,
        [Description] NVARCHAR (MAX) NULL,
        [CreatedDate] DATETIME       NOT NULL,
        [Done]        BIT            DEFAULT ((0)) NOT NULL,
        CONSTRAINT [PK_dbo.Todoes] PRIMARY KEY CLUSTERED ([ID] ASC)
    );

    至此我们的准备工作算是完成了。接下来我们要通过Entity Framework Core来对Todoes表做Object映射,生成C#的实体类。
    首先在Visual Studio 2019中创建空的.NET Core的Console程序作为启动项,再建立一个.NET Standard的Library用以生成Entities Class以及DbContext对象(当然把这两个工程合并为一个也是可以的)。当前工程的结构如下:

    接着我们添加Entity Framework Core的references,DataAccess作为数据访问层会使用到EntityFrameworkCore.SqlServer和EntityFrameworkCore.Tools这两个库。当然除了SqlServer,也可以替换成Sqlite等其他Provider。图中并没有升级到最新的5.0.1,这是因为我还在用.NET Core 3.1。如果开发实际项目的话,不妨等到.NET 5.x的LTS版本再全面切换过去。

    在我们的Sample中,EfDatabaseFirst作为启动项,需要依赖EntityFrameworkCore.Design库。同时它还需要引用DataAccess工程。

    References的添加到此也完成了,现在我们要通过Visual Studio的Package Manage Console窗口来生成实体类。这和.NET 4时代的体验稍有不同,不再有edmx文件了。我想现在大量的通过CLI来替代GUI,也是为了更好的跨平台,让使用Visual Studio Code的Linux小伙伴们有着一致的体验。就是苦了我这样喜欢点点点的懒人……
    最后我们要在Package Manage Console中输入Scaffold-DbContext命令。

    Scaffold-DbContext "Server=(localdb)mssqllocaldb;Database=master;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

    详细的语法请参考MSDN:Scaffold-DbContext 

    记得Default project要选DataAccess,否则Models文件夹会跑到EfDatabaseFirst工程里去了。在命令成功运行后,Solution Explorer的结构如下:

    如果点开Todoes类,会看到下面的代码,和数据库的表结构做了完美的映射。假使我们的数据库已经设计了100张表,生成实体类也只是一瞬间的事情,如果人肉来做这件事情,996是必不可少的……

    namespace DataAccess.Models
    {
        public partial class Todoes
        {
            public int Id { get; set; }
            public string Description { get; set; }
            public DateTime CreatedDate { get; set; }
            public bool Done { get; set; }
        }
    }

    本篇我们讨论了如何使用Entity Framework Core的Database First模式来创建实体类。并没有讨论如何使用实体类和DbContext对象。我想把这些留到下一篇Code First。毕竟Code First是更为主流,与Code结合也更为紧密。数据库这种事情,还是DBA比较擅长才对。
    SampleCode:
    https://github.com/manupstairs/EntityFrameworkCoreSamples

  • 相关阅读:
    Linux停SVN提交时强制写日志
    svn文件提交时强制写注释
    ssh 登录出现的几种错误以及解决办法
    Linux内存调试工具初探-MEMWATCH
    段错误调试神器
    Linux环境下段错误的产生原因及调试方法小结
    pthread_create()之前的属性设置
    Linux netstat命令详解
    Linux route命令详解和使用示例(查看和操作IP路由表)
    tomcat最大线程数的设置
  • 原文地址:https://www.cnblogs.com/manupstairs/p/14217206.html
Copyright © 2011-2022 走看看