zoukankan      html  css  js  c++  java
  • Asp.net Core 使用 EntityFrameworkCore 1.1

    前言

    相比大家也在开发中是非常喜欢用ORM的。今天就来介绍一下EntityFrameworkCore的使用方法。

    自从EF Core升级到1.1之后,确实变化挺大的。如果没试过真的不知道坑是挺多的。今天将结合Asp.net Core 、EF Core 1.1和SqlServer来做个简单介绍,顺便把遇到的坑记录一下,以免以后忘记了。

    项目结构

    1.Asp.net core的WebApi(EFcoreDemo.Api)

    2.EF core的standard libray (EFcoreDemo.DAL)

    首先是用cmd新建解决方案,就是sln文件啦,输入以下脚本:

    dotnet new sln -o EFcoreDemo
    cd EFcoreDemo

    之后分别建立上面说到的2个项目,运行下面2个脚本:

    dotnet new classlib -o EFcoreDemo.DAL
    dotnet new webapi -o EFcoreDemo.Api
    

    加了这2个项目之后,其实解决方案上面还是没有这2个项目的,要运行下面的2个脚本:

    dotnet sln add EFcoreDemo.DAL/EFcoreDemo.DAL.csproj
    dotnet sln add EFcoreDemo.Api/EFcoreDemo.Api.csproj
    

    这里要对项目的依赖关系进行处理,打开EFcoreDemo.Api.csproj文件,修改成这样

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
      <PropertyGroup>
        <TargetFramework>netcoreapp1.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <Folder Include="wwwroot" />
      </ItemGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
        <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
      </ItemGroup>
    
      <ItemGroup>
        <ProjectReference Include="../EFcoreDemo.DAL/EFcoreDemo.DAL.csproj" />
      </ItemGroup>
    </Project>
    View Code

    之后运行一下dotnet restore恢复一下。

    来到这里,项目结构就完成了。

    加入EntityFramework Core

    大家都知道.net core的引用都是要修改csproj文件的。然后我们在Api和DAL上都分别加上下面的引用

    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.2" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="1.1.2" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.1" />
    View Code

    但是加了引用还是不够的,还需要加入EF core的工具。这里就变化比较大了。在EF core 1.0时我们只需要把Microsoft.EntityFrameworkCore.Tools加到Tools节点就可以了。但是在1.1的时候改了,变成Microsoft.EntityFrameworkCore.Tools.DotNet这个工具包。然后他的添加方法是这样的,把下面的整个代码加入到2个.csproj文件的Project节点下。

    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
    </ItemGroup>

    好了之后,分别对Api和DAL两个项目走一下dotnet restore

    构建数据库

    构建数据库实体,这里就简单处理先,下面是实体的所有代码

        public interface IEntityBase
        {
            int Id { get; set; }
        }
    
        public class EntityBase : IEntityBase
        {
            [Key]
            public virtual int Id { get; set; }
        }
    
        [Table("People")]
        public class People : EntityBase
        {
            [StringLength(50)]
            public string Name { get; set; }
    
            public int Age { get; set; }
        }
    View Code

    之后建立DbContext,

        public class MyDbContext : DbContext
        {
            public DbSet<People> Peoples { get; set; }
    
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                base.OnConfiguring(optionsBuilder);
                optionsBuilder.UseSqlServer(@"Data Source=.sqlexpress;Initial Catalog=mydb;Integrated Security=SSPI;");
            }
    
        }
    View Code

    看起来一切就绪了,好的我们试试能生成migration文件不。根据以往的经验,需要在DAL的项目下走ef的脚本。按照ef tools的方案走以下脚本:

    dotnet ef migrations add V001
    

    然后提示了一串信息,但是到项目里面看,确实已经把migration文件加进来了

    提示信息大概就说为了避免运行时的错误,最好能在加migration文件的时候,指定哪个项目作为启动项目。

    好既然这样,我们就试试看怎么用Api项目作为启动,正确引用EF core。(上一步生成的migration文件先手动删除啦)

    我们在Api里面的startup.cs文件中的ConfigureServices方案按照EF core的方法,加入以下代码:

    services.AddDbContext<MyDbContext>(option =>
    {
            option.UseSqlServer(@"Data Source=.sqlexpress;Initial Catalog=mydb;Integrated Security=SSPI;");
    });

    运行以下脚本

    dotnet ef migrations add V001 --startup-project ../EFcoreDemo.Api

    没想到这么容易就成功了,而且项目的migration文件也生成了。

    之后我们运行以下脚本,看看是不是能真正建立数据库

    dotnet ef database update --startup-project ../EFcoreDemo.Api
    

    最终查看sql server,已经能正确建立数据库了。

    到此,基本已经完成了

    最后

    之前在网络上有一些文章也有教怎么使用EF core 1.1, 但是他们有一个共同的缺点,就是所有Migration文件都是存放在Api项目内的,而不是DAL内。

    所以那些方法不是真正能应用在项目中的。试想一下,如果migration在Api的项目中,这样DAL岂不是必须要有Api项目,才能记录完整的数据库迁移历史?这肯定是不正确的

  • 相关阅读:
    Python函数知识汇总-课堂笔记
    集合set内部常用功能和使用方法-课堂笔记及课后总结
    win7_64位操作系统安装python3.6.3遇到的问题和解决方法
    字典dic内部常用功能和使用方法-课堂笔记及课后总结
    列表内部常用功能和使用方法-课堂笔记及课后总结
    Python Str内部功能-个人课堂笔记,课后总结
    深入理解Java虚拟机读书笔记9----线程完全与锁优化
    深入理解Java虚拟机读书笔记8----Java内存模型与线程
    深入理解Java虚拟机读书笔记7----晚期(运行期)优化
    深入理解Java虚拟机读书笔记6----早期(编译期)优化
  • 原文地址:https://www.cnblogs.com/woailibian/p/6835452.html
Copyright © 2011-2022 走看看