65.9K
CodeProject 正在变化。 阅读更多。
Home

在.NET Core类库项目中使用Entity Framework Core执行存储过程

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (8投票s)

2017年2月10日

CPOL

3分钟阅读

viewsIcon

73285

在.NET Core类库项目中使用Entity Framework Core执行存储过程

引言

在这篇文章中,我想向您展示如何在数据访问层库核心项目中执行存储过程。

必备组件

请确保您已在计算机上安装了所有先决条件。如果没有,请逐一下载并安装所有软件。

首先,从此链接下载并安装Visual Studio 2015 Update 3。

如果您已安装Visual Studio 2015但尚未更新到Update 3,请从此链接下载并安装Visual Studio 2015 Update 3。

下载并安装.NET Core 1.0.1

问题

Entity Framework Core 1.0.0 RTM 仍然不支持类库项目的迁移。有关上述问题的更多信息,请参考以下链接:

解决方案

步骤 1

安装所有必要的组件后,使用.NET Core模板创建一个示例ASP.NET Core应用程序项目。

我们可以在此Web应用程序中使用我们的类库项目。首先,您需要创建两个.NET Core库项目——一个用于业务逻辑,另一个用于数据访问层。

按照相同的步骤创建数据访问层库项目。最终,我们的项目结构如下所示

删除现有代码,并在您的业务库项目的project.json文件中添加以下代码段

{
 "version": "1.0.0-*",

 "dependencies": {
   "NETStandard.Library": "1.6.0"
 },
 "frameworks": {
   "netcoreapp1.0": {}
 }
}

我们需要将我们的类库创建为.NET Core应用程序项目。为此,您需要在您的数据访问层库的project.json文件中添加以下代码。

{
 "buildOptions": {
   "emitEntryPoint": true
 },
 "frameworks": {
   "netcoreapp1.0": {}
 },
 "dependencies": {
   "Microsoft.NETCore.App": {
     "version": "1.0.1",
     "type": "platform"
   },
   "Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final",
   "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
   "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
   "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0"
 },
 "tools": {
   "Microsoft.EntityFrameworkCore.Tools": {
     "version": "1.0.0-preview2-final"
   }
 }
}

您还需要添加一个`static` `void` `main()` 方法来完成.NET Core应用程序。为此,您需要在您的类库项目中添加一个空的program.cs文件。请参考以下代码

public class Program
   {
       public static void Main(string[] args)
       {

       }
   }

第二步

在SQL Server中创建一个数据库和表以及存储过程。请在您的SQL Server中运行以下脚本

 USE [master] 

 GO 

 /****** Object:  Database [ContactDB]    Script Date: 2/10/2017 12:22:09 PM ******/ 

 CREATE DATABASE [ContactDB]
CONTAINMENT = NONE
ON  PRIMARY 

 ( NAME = N'ContactDB', _
   FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ContactDB.mdf' , _
   SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON 

 ( NAME = N'ContactDB_log', _
   FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ContactDB_log.ldf',_
   SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) 

 GO 

 ALTER DATABASE [ContactDB] SET COMPATIBILITY_LEVEL = 110 

 GO 

 IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) 

 begin 

 EXEC [ContactDB].[dbo].[sp_fulltext_database] @action = 'enable' 

 end 

 GO 

 ALTER DATABASE [ContactDB] SET ANSI_NULL_DEFAULT OFF 

 GO 

 ALTER DATABASE [ContactDB] SET ANSI_NULLS OFF 

 GO 

 ALTER DATABASE [ContactDB] SET ANSI_PADDING OFF 

 GO 

 ALTER DATABASE [ContactDB] SET ANSI_WARNINGS OFF 

 GO 

 ALTER DATABASE [ContactDB] SET ARITHABORT OFF 

 GO 

 ALTER DATABASE [ContactDB] SET AUTO_CLOSE ON 

 GO 

 ALTER DATABASE [ContactDB] SET AUTO_SHRINK OFF 

 GO 

 ALTER DATABASE [ContactDB] SET AUTO_UPDATE_STATISTICS ON 

 GO 

 ALTER DATABASE [ContactDB] SET CURSOR_CLOSE_ON_COMMIT OFF 

 GO 

 ALTER DATABASE [ContactDB] SET CURSOR_DEFAULT  GLOBAL 

 GO 

 ALTER DATABASE [ContactDB] SET CONCAT_NULL_YIELDS_NULL OFF 

 GO 

 ALTER DATABASE [ContactDB] SET NUMERIC_ROUNDABORT OFF 

 GO 

 ALTER DATABASE [ContactDB] SET QUOTED_IDENTIFIER OFF 

 GO 

 ALTER DATABASE [ContactDB] SET RECURSIVE_TRIGGERS OFF 

 GO 

 ALTER DATABASE [ContactDB] SET  ENABLE_BROKER 

 GO 

 ALTER DATABASE [ContactDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 

 GO 

 ALTER DATABASE [ContactDB] SET DATE_CORRELATION_OPTIMIZATION OFF 

 GO 

 ALTER DATABASE [ContactDB] SET TRUSTWORTHY OFF 

 GO 

 ALTER DATABASE [ContactDB] SET ALLOW_SNAPSHOT_ISOLATION OFF 

 GO 

 ALTER DATABASE [ContactDB] SET PARAMETERIZATION SIMPLE 

 GO 

 ALTER DATABASE [ContactDB] SET READ_COMMITTED_SNAPSHOT OFF 

 GO 

 ALTER DATABASE [ContactDB] SET HONOR_BROKER_PRIORITY OFF 

 GO 

 ALTER DATABASE [ContactDB] SET RECOVERY SIMPLE 

 GO 

 ALTER DATABASE [ContactDB] SET  MULTI_USER 

 GO 

 ALTER DATABASE [ContactDB] SET PAGE_VERIFY CHECKSUM  

 GO 

 ALTER DATABASE [ContactDB] SET DB_CHAINING OFF 

 GO 

 ALTER DATABASE [ContactDB] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) 

 GO 

 ALTER DATABASE [ContactDB] SET TARGET_RECOVERY_TIME = 0 SECONDS 

 GO 

 USE [ContactDB] 

 GO 

 /****** Object:  Table [dbo].[Contacts]    Script Date: 2/10/2017 12:22:09 PM ******/ 

 SET ANSI_NULLS ON 

 GO 

 SET QUOTED_IDENTIFIER ON 

 GO 

 SET ANSI_PADDING ON 

 GO 

 CREATE TABLE [dbo].[Contacts](
               [ContactID] [int] IDENTITY(1,1) NOT NULL,
               [FirstName] [varchar](100) NOT NULL,
               [LastName] [varchar](100) NULL,
               [ContactNo1] [varchar](20) NOT NULL,
               [ContactNo2] [varchar](20) NULL,
               [EmailID] [varchar](200) NULL,
               [Address] [varchar](300) NULL,
CONSTRAINT [PK_Contacts] PRIMARY KEY CLUSTERED 

 (
               [ContactID] ASC 

 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, _
        ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 

 ) ON [PRIMARY]
 

 GO 

 SET ANSI_PADDING OFF 

 GO 

 /****** Object:  StoredProcedure [dbo].[GetContactList]    Script Date: 2/10/2017 12:22:10 PM ******/ 

 SET ANSI_NULLS ON 

 GO 

 SET QUOTED_IDENTIFIER ON 

 GO 

 CREATE PROCEDURE [dbo].[GetContactList]
             

 AS                

 SET NOCOUNT ON;                       
BEGIN  
                 SELECT
                                                [ContactID]
                                               ,[FirstName]
                                               ,[LastName]
                                               ,[ContactNo1]
                                               ,[ContactNo2]
                                               ,[EmailID]
                                               ,[Address]
                FROM    Contacts
END 

 GO 

 USE [master] 

 GO 

 ALTER DATABASE [ContactDB] SET  READ_WRITE 

 GO

步骤 3

现在我们可以使用以下dotnet `ef` 命令生成实体。

`ef` 命令现在已不存在,您需要使用以下 dotnet 命令:

dotnet ef dbcontext scaffold -c ContactDbContext -o Models -f "Data Source=yourdatasource; 
Initial Catalog=ContactDB;User ID=youruserid;Password=yourpassword" 
Microsoft.EntityFrameworkCore.SqlServer

其中 Models 是您想要在数据层项目中创建的包含所有实体的文件夹名称。

要执行上述命令,您需要打开命令提示符。转到您的数据访问层项目路径并使用上述命令。请查看以下屏幕截图以了解更多详细信息

当您在执行上述命令后在命令提示符中看到“Done”时,则会在我们的数据访问层项目中创建一个名为“Models”的文件夹,其中包含数据库实体。请参见以下屏幕截图

打开“ContactDbContext.cs”文件,您将看到您在上述`ef` 命令提示符中指定的SQL连接字符串和相关的联系人实体

好的,我们的数据访问层完成了。

步骤 4

在业务层项目中添加您的数据访问引用,并在您的Web项目中添加您的业务层引用。

步骤 5

现在我创建了一个扩展类,用于将数据库对象映射到我们的实体框架实体。

步骤 6

在业务层类库中创建一个名为“IContactRepository.cs”的接口

步骤 7

创建一个名为“ContactRepository.cs”的存储库并实现上述接口

就是这样!我们现在将使用.NET Core类库项目来使用我们的存储过程。

希望您喜欢这篇文章。

© . All rights reserved.