在.net core中数据操作的两种方式(Db first && Code first)

摘要:
-ContextDir<String>要放置DbContext文件的目录-Context<String>name DbContext类生成。使用System.Collections.Generic;使用System.ComponentModel.DataAnnotations.Schema;namespaceContoso大学。模型{publicclassCourse{[DatabaseGenerated]publicintCourseID{get;set;}publicstringTitle{get,set;}publicintCredits{get set;}publicICollection<Enrollment>Enrollments{get、set;}}}3。创建数据库上下文在项目文件夹中,创建一个名为Data的文件夹。要将SchoolContext注册为服务,请打开Startup。cs,并将突出显示的代码添加到ConfigureServices方法。

在开发过程中我们通常使用的是Db first这种模式,而在.net core 中推荐使用的却是 code first 反正我是很不习惯这种开发模式

于是就搜寻整个微软的官方文档,终于找到了有关.net core 使用Db first 的教程,这里给出链接:https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/powershell

一.Db first

  1.使用Db first 需要通过Nuget引用几个依赖包

         Microsoft.EntityFrameworkCore

      Microsoft.EntityFrameworkCore.Tools

      Microsoft.EntityFrameworkCore.SqlServer.Design        

  2.打开程序管理控制台

    在.net core中数据操作的两种方式(Db first && Code first)第1张

  3.执行创建实体类的命令

    Scaffold-DbContext -Connection "Server=.;Database=Company;uid=sa;pwd=123@qwe" Microsoft.EntityFrameworkCore.SqlServer -OutputDir "Models"

     其中   --OutputDir <String >   要在其中放置文件的目录。 路径相对于项目目录。

        -Connection <String>   要在其中放置文件的目录。 路径相对于项目目录。

        -ContextDir <String >   要在其中放置 DbContext 文件的目录。 路径相对于项目目录。

        -Context <String>    名称DbContext类生成。

        -Tables <String[]>    要为其生成实体类型的表。 如果省略此参数,则包括所有表。

     当然我们也可以只生成选定的表,以及指定dbcontext上下文的路径和名称

Scaffold-DbContext "Server=.;Database=Company;uid=sa;pwd=123@qwe" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext

   当对表有修改时,我们可以通过-Force 参数重新生成实体类

Scaffold-DbContext "Server=.;Database=Company;uid=sa;pwd=123@qwe" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -Force

  通过添加测试模型遇到的问题

      在.net core中数据操作的两种方式(Db first &amp;&amp; Code first)第2张

     解决方案:

      在项目的Startup.cs的ConfigureServices方法中注册生成的上下文

        在.net core中数据操作的两种方式(Db first &amp;&amp; Code first)第3张

 二.Code first(这种方式在官方文档中有很多例子,在这里我借用官方文档的实例来简单介绍一下操作步骤)

    1.通过Nuget安装依赖包

      Microsoft.EntityFrameworkCore 

      2.创建实体类

      在 Models 文件夹中,创建 Enrollment.csCourse.cs并且用以下代码替换现有代码:

namespace ContosoUniversity.Models
{
    public enum Grade
    {
        A, B, C, D, F
    }

    public class Enrollment
    {
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
        public Grade? Grade { get; set; }

        public Course Course { get; set; }
        public Student Student { get; set; }
    }
}

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

namespace ContosoUniversity.Models
{
    public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int CourseID { get; set; }
        public string Title { get; set; }
        public int Credits { get; set; }

        public ICollection<Enrollment> Enrollments { get; set; }
    }
}  

     3.创建数据库上下文

      在项目文件夹中,创建名为的文件夹 Data

      在 Data 文件夹创建名为 SchoolContext.cs 的类文件,并将模板代码替换为以下代码:

using ContosoUniversity.Models;
using Microsoft.EntityFrameworkCore;

namespace ContosoUniversity.Data
{
    public class SchoolContext : DbContext
    {
        public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
        {
        }

        public DbSet<Course> Courses { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Student> Students { get; set; }
    }
}

    4.注册 SchoolContext

      ASP.NET Core 默认实现 依赖注入在应用程序启动过程通过依赖注入注册相关服务 (例如 EF 数据库上下文)。 需要这些服务的组件 (如 MVC 控制器) 可以通过向构造函数添加相关参数来获得对应服务。 在本教程后面你将看到控制器构造函数的代      码,就是通过上述方式获得上下文实例。

      若要将 SchoolContext 注册为一种服务,打开 Startup.cs ,并将高亮代码添加到 ConfigureServices 方法中。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

     services.AddDbContext<SchoolContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddMvc();
}

    打开 appsettings.json 文件,并如以下示例所示添加连接字符串 。

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

     5.添加数据

      Program.cs,修改 Main 方法,使得在应用程序启动时能执行以下操作:   

        从依赖注入容器中获取数据库上下文实例。

  

public static void Main(string[] args)
{
     var host = CreateWebHostBuilder(args).Build();

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;
        try
        {
            var context = services.GetRequiredService<SchoolContext>();
             var courses = new Course[]
            {
            new Course{CourseID=1050,Title="Chemistry",Credits=3},
            new Course{CourseID=4022,Title="Microeconomics",Credits=3},
            new Course{CourseID=4041,Title="Macroeconomics",Credits=3},
            new Course{CourseID=1045,Title="Calculus",Credits=4},
            new Course{CourseID=3141,Title="Trigonometry",Credits=4},
            new Course{CourseID=2021,Title="Composition",Credits=3},
            new Course{CourseID=2042,Title="Literature",Credits=4}
            };
            foreach (Course c in courses)
            {
                context.Courses.Add(c);
            }
            context.SaveChanges();
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while seeding the database.");
        }
    }

    host.Run();
}

  

免责声明:文章转载自《在.net core中数据操作的两种方式(Db first &amp;amp;&amp;amp; Code first)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇超好玩!10款神奇的字符图案 &amp;amp; 词汇云生成工具CSS盒子模型+box-sizing下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

事务persistenceJPA基本API描述

改章节笔者在北京喝咖啡的时候突然想到的...近期就有想写几篇关于事务persistence的博客,所以回家到以后就奋笔疾书的写出来发布了 JPA(Java Persistence API,Java持久化API),定义了对象-关系映射(ORM)以及实体对象持久化的标准接口。 JPA是JSR-220(EJB3.0)标准的一部分,在JSR-220中划定实体对象(...

Android权限禁止及友好提示用户开通必要权限

Android权限 Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。这包括读写用户的私有数据(联系人,短信,相册,位置)、读写其他应用的文件、执行网络访问、使设备保持唤醒状态等等。 如果是一些正常的权限(非高危权限),比如网络访问等在应用清单文件(AndroidManifest.xml)中配置,...

Tomcat学习总结(2)——Tomcat使用详解

一、Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件。 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改 例如:将Tomcat服务器的启动端口由默认的8080改成8081端口 Tomcat服务器启动端口默认配置 1...

spring注解(Component、依赖注入、生命周期、作用域)

1、注解 注解就是一个类,使用@加上注解名称,开发中可以使用注解取代配置文件 2、@Component 取代<bean  class="">,@Component 取代<bean id="" class=""> (1)创建一个类(该类与dao层无联系,是一个单独的类) @Component("studentService") pub...

Java安全之Weblogic内存马

Java安全之Weblogic内存马 0x00 前言 发现网上大部分大部分weblogic工具都是基于RMI绑定实例回显,但这种方式有个弊端,在Weblogic JNDI树里面能将打入的RMI后门查看得一清二楚。并且这种方式实现上传Webshell落地文件容易被Hids监测。 0x01 调试分析 调试分析 写一个filter进行断点跟踪上层代码。 其实和T...

普通Java类获取Spring的bean traceofsun的专栏 博客频道 CSDN.NET

普通Java类获取Spring的bean - traceofsun的专栏 - 博客频道 - CSDN.NET 普通Java类获取Spring的bean 分类:Extjs开发2010-08-13 09:47451人阅读评论(0)收藏举报 在SSH集成的前提下。某些情况我们需要在Action以外的类中来获得Spring所管理的Service对象...