CodeFirst 는 0 부터 Asp.Net Core 2.0 사 이 트 를 구축 합 니 다.

한 걸음 한 걸음 Asp.Net Core 2.0 사 이 트 를 구축 하 는 방법 을 가르쳐 드 리 겠 습 니 다.아래 의 모든 것 은'NETCore 2.0 환경'에 구축 되 었 습 니 다.
해결 방안 을 오른쪽 클릭>새 항목>
웹>ASP.NET Core 웹 프로그램(.NET Core)선택

웹 프로그램 을 선택 하 십시오.Docker 사용 을 잠시 선택 하지 않 습 니 다.인증 은 개인 사용자 계 정 을 선택 하 십시오.(일련의 사용자 인증 코드 가 자동 으로 생 성 됩 니 다)


다음 생 코드 계층 디 렉 터 리 는 다음 과 같 습 니 다.

그 중에서 신분 정보의 관련 실현,예 를 들 어 관련 실체 정보(user)와 같은 것 이 포 함 됩 니 다.마이크로소프트 가 자동 으로 생 성 된 사용자 실체 류 를 확장 하려 면 Models 의 ApplicationUser 에서 확장 할 수 있 습 니 다.이 ApplicationUser 에 속성 을 추가 하면 됩 니 다.예 를 들 어 WeChatId 속성 을 추가 하고 다음 과 같이 추가 합 니 다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;

namespace DotNetCore20.Web.Models
{
  // Add profile data for application users by adding properties to the ApplicationUser class
  public class ApplicationUser : IdentityUser
  {
    /// <summary>
    ///   Id
    /// </summary>
    public string WeChatId { get; set; }
  }
}

이후 실행 및 이전 을 생 성하 면 데이터베이스 의 AspNetUsers 에 WeChatId 속성 이 많아 집 니 다.
1:설치 참조
nugnet 참조 가 실 효 될 때 패키지 관리 콘 솔 에 입력 할 수 있 습 니 다:
dotnet 복원 하면 됩 니 다.

복구 명령 후 NuGet 에서 Microsoft.VisualStudio.Web.Code Generation.Design 의 오류 가 발생 할 수 있 습 니 다.정 보 는 다음 과 같 습 니 다.
프로젝트 대상 프레임 워 크 가 아 닌'NETPortable,Version=v 0.0,Profile=Profile 259,.NETFramework,Version=v 4.6.1'을 사 용 했 습 니 다.'NETCoreApp,Version=v 2.0'은 패키지'Microsoft.Composition 1.0.27'을 복원 합 니 다.이것 은 호환성 문 제 를 야기 할 수 있다.
이 라 이브 러 리 는 ASP.NET Core 의 코드 생 성 도구 입 니 다.컨트롤 러 와 보 기 를 만 드 는 데 사용 되 는 dotnet-aspnet-codegenerator 명령 을 포함 하여 프로젝트 실행 에 영향 을 주지 않 고 잠시 마 운 트 해제 할 수 있 습 니 다.
프로젝트 라 이브 러 리 에 대한 인용 은 다음 과 같은 몇 가지 방식 이 있다.
1.Nuget 설치 하기(홈 페이지)https://www.nuget.org/packages/)
2.오른쪽 단 추 를 눌 러 서 메뉴 의 인용 추가
3.패키지 관리 콘 솔 에 입력 가능:Install-Package 참조 라 이브 러 리 이름
4.csproj 프로젝트 파일 을 오른쪽 단추 로 편집 하여 추가 한 다음 dotnet restore 를 실행 할 수 있 습 니 다.

2.실체 프로그램 집합 만 들 기
솔 루 션 오른쪽 단추>항목 추가>

먼저 추상 클래스 를 만 들 고 Entity 실체 계승 을 제공 하 며 주로 모든 실체 에 공용 속성 을 제공 합 니 다.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using System.Text;

namespace DotNetCore20.Entity.Core
{
  /// <summary>
  /// DB   
  /// </summary>
  [Serializable]
  public abstract partial class BaseEntity
  {
    /// <summary>
    /// Id
    /// </summary>
    [DataMember]
    public long Id { get; set; }

    /// <summary>
    /// DB Y  
    /// </summary>
    [Timestamp]
    public byte[] RowVersion { get; set; }

    /// <summary>
    ///     
    /// </summary>
    [DataMember]
    public DateTime CreateTime { get; set; }

    /// <summary>
    ///     
    /// </summary>
    [DataMember]
    public DateTime UpdateTime { get; set; }

    /// <summary>
    ///   
    /// </summary>
    [DataMember]
    public EnumState State { get; set; }
  }

  /// <summary>
  ///   
  /// </summary>
  public enum EnumState
  {
    /// <summary>
    ///   
    /// </summary>
    Delete = 1,

    /// <summary>
    ///   
    /// </summary>
    Normal = 0,
  }
}
UserExtend 사용자 확장 클래스 추가(Entity):

using DotNetCore20.Entity.Core;
using System;
using System.Runtime.Serialization;

namespace DotNetCore20.Entity
{
  [DataContract]
  public class UserExtend : BaseEntity
  {
    /// <summary>
    ///   Id
    /// </summary>
    [DataMember]
    public long UserId { get; set; }

    /// <summary>
    ///   
    /// </summary>
    [DataMember]
    public long NickName { get; set; }

  }
}

3.데이터 계층 만 들 기

인용 추가
DAL 층 은 EF 실체 맵 과 우리 가 앞에서 정의 한 Entity 의 UserExtend 실체 표를 사용 해 야 하기 때문에 관련 인용,DotNetCore 20.Entity 와 Microsoft.EntityFramework Core.Tools 를 추가 해 야 합 니 다.
단축 키:Ctrl+Alt+o 패키지 관리자 열기
install-package Microsoft.EntityFrameworkCore.Tools

인터넷 다운로드 제한 에 실 패 했 을 경우 nuget 미 러 를 블 로그 소스 자원 으로 바 꾸 는 것 을 추천 합 니 다.방법 은 다음 과 같 습 니 다.
솔 루 션>솔 루 션 을 관리 하 는 nuget 패 키 지 를 오른쪽 단추 로 누 르 십시오.다음 과 같이 표시 합 니 다.


새 데이터 컨 텍스트 클래스 를 만 듭 니 다.디 렉 터 리 구 조 는 다음 과 같 습 니 다.

DotNetCoreDbContext 내부 코드 는 다음 과 같이 변경 되 었 습 니 다.

using DotNetCore20.Entity;
using Microsoft.EntityFrameworkCore;

namespace DotNetCore20.DAL.DbContext
{
  public class DotNetCoreDbContext : Microsoft.EntityFrameworkCore.DbContext
  {
    public DotNetCoreDbContext(DbContextOptions<DotNetCoreDbContext> options) : base(options)
    {
    }
    public DbSet<UserExtend> UserExtend { get; set; }
  }
}

이 기본 실체 맵 과 관련 된 코드 가 모두 끝 났 습 니 다.지금 은 데이터베이스 연결 문자열 의 설정 이 있 습 니 다.
먼저 apptsettings.json 파일 을 열 고 ConnectionStrings 노드 에 다음 과 같이 추가 합 니 다.
"DotNetCoreConnection": "Server=(localdb)\\mssqllocaldb;Database=DotNetCoreDb;Trusted_Connection=True;MultipleActiveResultSets=true"
증가 후 다음 과 같 음:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=DotNetCoreDefaultDb;Trusted_Connection=True;MultipleActiveResultSets=true",
    "DotNetCoreConnection": "Server=(localdb)\\mssqllocaldb;Database=DotNetCoreDb;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
 "Logging": {
  "IncludeScopes": false,
  "Debug": {
   "LogLevel": {
    "Default": "Warning"
   }
  },
  "Console": {
   "LogLevel": {
    "Default": "Warning"
   }
  }
 }
}

웹 사이트 의 Startup 파일 을 열 고 Configure Services 방법 에 줄 을 추가 합 니 다.

//           
services.AddDbContext<DotNetCoreDbContext>(options =>
 options.UseSqlServer(Configuration.GetConnectionString("DotNetCoreConnection")));
증가 후 다음 과 같 음:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using DotNetCore20.Web.Data;
using DotNetCore20.Web.Models;
using DotNetCore20.Web.Services;
using DotNetCore20.DAL.DbContext;

 
namespace DotNetCore20.Web
{
  public class Startup
  {
    public Startup(IConfiguration configuration)
    {
      Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
      services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

      //           
      services.AddDbContext<DotNetCoreDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DotNetCoreConnection")));

      services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

      // Add application services.
      services.AddTransient<IEmailSender, AuthMessageSender>();
      services.AddTransient<ISmsSender, AuthMessageSender>();

      services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
        app.UseDatabaseErrorPage();
      }
      else
      {
        app.UseExceptionHandler("/Home/Error");
      }

      app.UseStaticFiles();

      app.UseAuthentication();

      app.UseMvc(routes =>
      {
        routes.MapRoute(
          name: "default",
          template: "{controller=Home}/{action=Index}/{id?}");
      });
    }
  }
}

프로그램 을 실행 하고 로그 인(데이터베이스 에 접근 하 는 작업 만 가능)을 누 르 면 오류 페이지 가 발생 합 니 다.

클릭 하여 이전즉,데이터 베 이 스 를 자동 으로 이전 합 니 다.
두 개의 데이터베이스 때문에 사용자 에 대한 표 AspNetUsers 만 자동 으로 이동 합 니 다.
그래서 VS 패키지 관리자 에서 명령 을 내 려 이동 해 야 합 니 다.
Add-Migration firstMigration -Context DotNetCoreDbContext
이상 명령 을 실행 한 후 다음 명령 을 수행 합 니 다:
Update-Database -ContextDotNetCoreDbContext;
그리고 데이터 베 이 스 를 보면 두 개의 데이터 베 이 스 를 더 발견 할 수 있 습 니 다.
DotNetCoreDefaultDb 생 성 을 예 로 들 면 다음 표 가 생 성 됩 니 다.

그 중 AspNetUsers 에는 이전에 추 가 된 WeChatId 필드 가 있 습 니 다.

다음 프로그램 을 다시 실행 합 니 다:

이렇게 완전한 Asp.NetCore 2.0 사이트 가 초보 적 으로 운행 되 기 시작 했다.
다음 편 은 DAL 층 에 Repository 와 UnitWorks 를 추가 하여 간단 한 crud 통합 관 리 를 완성 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기