ASP。NET核心项目真正的版权管理系统(3)通过使用PostgreSQL EntityFramework核心-研发项目管理

>>ASP。NET核心项目真正的版权管理系统(3)通过使用PostgreSQL EntityFramework核心-研发项目管理

ASP。NET核心项目真正的版权管理系统(3)通过使用PostgreSQL EntityFramework核心-研发项目管理

引言:当今社会市场竞争激烈,软件开发企业想要占据前列需要在研发管理上下功夫,“向管理要效益”已经成为软件开发企业的共识,研发项目管理在软件企业中的普及也是大势所趋。国内做软件项目管理工具的开发商翼发云近几年发展十分迅速,越来越多的软件开发企业认识到研发项目管理的重要性,能切实有效降低成本,规范软件开发流程,提高软件产品质量。国内研发项目管理系统、敏捷开发管理工具的领导品牌翼发云敏捷项目管理系统采用可视化业务流程技术,支持瀑布模型等传统软件研发项目管理,同时也支持scrum等敏捷开发流程,是理想的敏捷开发管理工具,涵盖软件项目管理工作的整个生命周期。为提高国内软件开发企业的项目管理水平,分享一篇企业管理相关的知识文章。

0 ASP.NET核心项目物权管理系统(0)

1 ASP。NET核心项目实战的权限管理系统(1)使用adminlte建立前端 scrum

2 ASP.NET核心项目实战权限管理系统(2)功能与实体设计

3 ASP。NET核心项目真正的版权管理系统(3)通过使用PostgreSQL EntityFramework核心 软件项目管理

4 ASP.NET核心项目物权管理系统(4)依赖于多项目分层实施注入、仓储和服务。

5 ASP.NET核心项目实战权限管理系统(5)用户登录 敏捷开发流程

6 ASP.NET核心项目实战权限管理系统(6)功能管理

7 ASP.NET核心项目版权管理系统(7)组织、角色、用户权限 研发项目管理

8 ASP.NET核心项目版权管理系统(8)功能菜单动态加载

GitHub源地址

0数据库的安装和配置

0数据库简介

既然Asp.Net Core最大的特性就是跨平台,就搭配使用一个可以跨平台的数据库。PostgreSQL是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。目前PostgreSQL可以运行在所有主流操作系统上,包括Linux、Unix(AIX、BSD、HP-UX、SGI IRIX、Mac OS X、Solaris和Tru64)和Windows。PostgreSQL是完全的事务安全性数据库,完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程)。它支持了大多数的SQL:2008标准的数据类型,包括整型、数值值、布尔型、字节型、字符型、日期型、时间间隔型和时间型,它也支持存储二进制的大对像,包括图片、声音和视频。PostgreSQL对很多高级开发语言有原生的编程接口,如C/C++、Java、.Net、Perl、Python、Ruby、Tcl 和ODBC以及其他语言等,也包含各种文档。

0.1数据库的安装和配置

自行去PostgreSQL官网下载符合你自己系统的版本,开始安装,从我自己的安装体验来看,没什么需要特别注意的地方,只需要按照提示一步步安装即可,在最后的时候根据需要选择以下语言,设置超级用户角色postgres的登录密码即可。

创建系统所使用的角色

打开安装好的PostgreSQL数据库,输入密码进入管理界面。右键”登录角色”,创建一个名称为”fonour”的角色,在”角色权限”页签中把所有能能勾选的功能都勾选上。

Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

右键PostgreSQL服务器,选择断开服务器。接着右键,单击”属性”菜单,在弹出窗口的用户名出输入刚才新建的”fonour”角色,输入密码并勾选记住密码。确定,连接即可。

1创建一个数据库应用entityframeworkcore的codefirst模式

1在fonour.entityframeworkcore项目创建DbContext

由于EF Core跟PostgreSQL都需要现学现用,EF Core的使用跟EF6.0还是有很多不同的,在使用的过程中遇到了不少的问题,尤其是针对PostgreSQL使用Guid类型的主键,后面会把这些坑做一个简单的记录。

0添加相关依赖项

需要添加的相关依赖及说明如下:

  • npgsql.entityframeworkcore.postgresql

PostgreSQL数据提供的支持EF Core的基础类库,是通过EF Core使用PostgreSQL数据库的根本。

  • npgsql.entityframeworkcore.postgresql.design

使用Guid(对应Postgre数据的类型为uuid)类型的主键必须,int/long类型的主键不添加也没问题。

  • microsoft.entityframeworkcore.tools

EF Core工具,CodeFirst数据库迁移相关操作必须。

  • Fonour。域

我们自己创建的一个类库项目,其中包含了组织机构、功能、角色、用户等实体的定义。

添加相关引用依赖的方式有多种,可以通过NuGet程序包管理器控制台的Install-Packege命令

PM & gt;安装包npgsql.entityframeworkcore.postgresql PM & gt;安装包npgsql.entityframeworkcore.postgresql.design PM & gt;安装包microsoft.entityframeworkcore.tools。

或者直接在NuGet程序包管理器中搜索相关类库,进行安装

Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

最直接的方法是直接修改project.json配置文件,project.json配置文件最终修改后内容如下。

{“版本”:“1.0.0 *”、“依赖”:{“fonour。域”:“1.0.0-0”、“微软”。entityframeworkcore。工具”、“1.0.0-preview2-final”、“netstandard。图书馆”、“1.6.0”、“npgsql。entityframeworkcore。PostgreSQL”、“1.0.1”、“npgsql。entityframeworkcore。PostgreSQL。设计”:“1.0.1”},{“框架”:“netcoreapp1.0”:{“进口”:“dotnet5.6”、“portable-net45 + Win8”] } },{“工具”:“微软。entityframeworkcore。工具”:{“版本”:“1.0.0-preview2-final”、“进口”,“portable-net45 + Win8 + dnxcore50”、“portable-net45 + Win8”] } } }

注意,frameworks部分,如果默认是netstandard1.6框架,必须进行修改,否则会提示不支持相关依赖项。

1创建DbContext

根据EF Core对多对多关联关系的要求,增加了UserRole、RoleMenu两个关联关系实体,同时对原有实体进行了调整。

公共类userrole {公共Guid UserId {得到;集;}公共用户{ };};{ { } { } } };
公共课rolemenu {公共Guid RoleId {得到;集;}公共角色{ };};{ { } { } } };

在Fonour.EntityFrameworkCore项目下新建一个数据上下文操作类,命名为”FonourDBContext”,其中增加权限管理系统相关实体的DbSet的定义。最终代码如下:

Public class FonourDbContext: DbContext public {FonourDbContext (DbContextOptions< FonourDbContext> options): base (options) {public} Departments {DbSet< Department> get; set; public DbSet&lt Menu>}; {set}; Menus get; public DbSet< Role> Roles set;} public {get; DbSet< User> Users {get}; set; public DbSet< UserRole> UserRoles set;} public {get; DbSet< RoleMenu> RoleMenus set;} protected {get; override void OnModelCreating (ModelBuilder builder) {//UserRole builder.Entity&lt UserRole> the associated configuration; (.HasKey) (ur => new {ur.UserId, ur.RoleId}); //RoleMenu associated configuration builder.Entity< RoleMenu> () .HasKey (RM => new {rm.RoleId, rm.MenuId}); builder.Entity< Rolemenu &gt;HasOne(RM)(= & gt;RM。角色)。WithMany(R = & gt;r.rolemenus.hasforeignkey(RM)= & gt;rm.roleid(。HasForeignKey)RM = & gt;RM。menuid);// GUID使主键类型扩展builder.haspostgresextension(“UUID OSSP”)base.onmodelcreating(Builder } });

在Fonour.MVC项目1.1数据库连接相关的配置

0添加相关依赖项

在Asp.Net Core中,使用json格式的配置文件进行系统相关参数的配置,将相关配置文件通过ConfigurationBuilder进行统一管理,得到IConfigurationRoot的配置实例,获取相关配置文件配置节点的信息。想要使用配置文件相关服务,需要添加一下依赖。

  • microsoft.extensions.configuration
  • microsoft.extensions.configuration.fileextensions
  • microsoft.extensions.configuration.json

还需要添加对Fonour.EntityFrameworkCore项目的引用。

最终Fonour.MVC项目的project.json文件配置如下:

{{“dependencies”: “Microsoft.NETCore.App”: “1.0.1”, “Microsoft.AspNetCore.Diagnostics”, “1.0.0”, “Microsoft.AspNetCore.Server.IISIntegration”, “1.0.0”, “Microsoft.AspNetCore.Server.Kestrel”, “1.0.1”, “Microsoft.Extensions.Logging.Console”, “1.0.0”, “Microsoft.AspNetCore.Mvc”, “1.0.1”, “Microsoft.AspNetCore.StaticFiles”, “1.0.0”, “Microsoft.Extensions.Configuration” “1.0.0”, “Microsoft.Extensions.Configuration.FileExtensions”, “1.0.0”, “Microsoft.Extensions.Configuration.Json”, “1.0.0”, “Fonour.EntityFrameworkCore”: “1.0.0-*”}, {“tools”: “Microsoft.AspNetCore.Server.IISIntegration.Tools”: “1.0.0-preview2-final”}, {“frameworks”: “netcoreapp1.0”: {“imports”: ” “Dotnet5.6”, “portable-net45+win8”]}}, {“buildOptions”: “emitEntryPoint: true”, “preservecompilationcontext”、“runtimeoptions”:真},{“configproperties”:“系统。GC。服务器”:真正的{ } },{“publishoptions”:“包括”、“wwwroot”、“网络配置”“脚本”:] },{“”:“postpublish DotNet发布IIS –发布发布:文件夹outputpath %——框架[ %发布:fulltargetframework % ] }”,“运行时”,“win10-x64”:{ { } } }

1增加appsettings.json配置文件

右键Fonour.MVC项目,新增一个Asp.Net配置文件类型,名称为appsettings.json的配置文件。

Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

appsettings.json文件目前主要内容为定义数据库连接字符串,内容如下:

{ ‘connectionstrings”:{“默认”:“用户ID = fonour;密码= 123456;主机为localhost端口= = 5432;数据库;Fonour;池= true;} }”

2启用数据库连接

首先在Startup.cs中定义一个IConfigurationRoot的属性,然后在系统启动类Startup.cs的构造函数中,对配置文件进行管理。

公共iconfigurationroot配置{获得};公共启动(ihostingenvironment env){ var建造新的(configurationbuilder)。SetBasePath(env。contentrootpath)。AddJsonFile(“appSettings。JSON,可选:真的,relOAdonchange:true.addjsonfile($ appSettings。{ env。environmentname }。JSON),可选:真addenvironmentvariables(生成器。);配置=(建设者。建立);});

在ConfigureServices方法中获取数据库连接字符串,并添加数据库连接服务。

公共无效configureservices(iservicecollection服务){ //获取数据库连接字符串变量sqlConnectionString = configuration.getconnectionstring(“违约”);/ /添加数据上下文的服务。adddbcontext & lt(选项;fonourdbcontext &gt;= & gt;options.usenpgsql(sqlConnectionString));(服务。addmvc);}

1.2使用codefirst数据库迁移命令创建一个数据库

在EntityFrameworkCore中数据库迁移有两种方式。

0使用命令行工具

在应用程序根目录按住shift键同时单击鼠标右键,选择”在此处打开命令窗口”,输入数据库迁移的命令

dotnet EF迁徙添加init DOTNET EF数据库更新

1使用包管理器控制台

在程序包管理器控制台中默认项目选择Fonour.EntityFrameworkCore,输入以下命令,自动创建数据库迁移文件。

添加迁移init

注意,一定要将Fonour.MVC设置为启动项目。

执行完成后,项目中增加了数据库迁移文件。

Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

输入以下命令,进行数据库更新操作。

更新数据库

提示更新完成后,查看我们的数据库,会发现数据库及数据库表已经创建完成。

Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

2数据初始化

为保证系统正常运行,我们需要对系统进行数据初始化,要初始化的数据包括一下内容:

  • 用户表用用户名管理插入超级管理员用户信息。
  • 功能菜单表增加了组织管理、角色管理、用户管理和功能管理四个基本数据。
  • 组织表插入一个组织的信息(主要是因为用户表有DepartmentID外键)

在Fonour.EntityFrameworkCore项目中增加一个新的数据初始化类,命名为SeedData.cs,修改内容如下:

公共静态类seeddata静态初始化iservicepr({公共{使用(VAR上下文=新FonourDbCon(上下文。用户。任何){ if(返回){ };//初始化数据的GUID DepartmentID = guid.newguid /添加context.departments.add师(新部门{编号为DepartmentID,名字为Fonour,ParentID = GUID。空集团总部});/ /添加一个超级管理员用户context.users.add(新用户{用户名=“admin”,密码为“123456”/ /名称=“超级”,DepartmentID =部门);} //加四基本功能菜单(新context.menus.addrange菜单{名称=“组织管理”,代码=“部”,编号为0,ParentID = GUID。空,图标=“FA链接”},{新菜单名称=“角色管理”,代码为“角色”,编号为1,PArentid = GUID。空,图标=“FA李NK新菜单{名称},=“用户管理”,代码为“用户”,编号为2,ParentID = GUID。空,图标=“FA链接”的新名字= {菜单},“管理”,代码=部门编号= 3,ParentID = GUID。空,图标= FA链接(上下文。调用SaveChanges));} } } };

在Fonour.MVC项目的Startup.cs中Configure方法最后增加数据初始化的操作。

公共无效配置(iapplicationbuilder APP,ihostingenvironment env,iloggerfactory loggerfactory){ loggerfactory.addconsole();如果(env.isdevelopment()){ //发展环境app.usedeveloperexceptionpage异常处理();}否则{ /生产环境异常处理app.useexceptionhandler(“/共享/错误”);} // app.usestaticfiles(静态文件);// MVC的路由系统的登录设置默认(路线= & gt;app.usemvc { routes.maproute(名称:“默认”的模板:“{ }或{登录控制器=行动=指数}、{身份证吗?}”);});seeddata。初始化(程序。应用服务);//初始化数据}

运行程序。查看数据库,发现初始化数据已经生成成功。

Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

3踩坑

  • 使用GUID类型的主键添加“npgsql。entityframeworkcore。PostgreSQL。设计”:“1.0.1”参考,并注意1.0.0版本不支持。
  • 使用GUID类型的主键,你必须启用扩展builder.haspostgresextension(“UUID OSSP”)在DbContext的OnModelCreating重写方法的UUID。
  • 论多元关系的实体设计

在以前的EntityFramework中,多对多关系的实体,只需要创建两个实体,两个实体分别包含一个对方集合的导航属性即可,是不需要创建关联实体类的。如,User实体中包含一个ICollection<Role> Roles的导航属性,同时Role实体中包含一个ICollection<User> Users的导航属性,EF会根据实体间的关系自动创建一个User_Role中间表,若想修改中间表名,进行相关配置即可。

EF Core中必须创建关联关系的实体才行。

  • EF核心不支持layzinglOAd暂时

4总结

本节主要是研究怎样通过EntityFramework Core使用PostgreSQL,通过CodeFirst数据库迁移的方式根据设计好的实体进行数据库的创建,最后我们根据系统需要,进行了一些相关数据的初始化。

接下来要实现用户登录功能。

文章从互联网整理而来,旨在传播scrum、软件项目管理、研发项目管理、敏捷开发管理工具的知识与应用,帮助软件开发企业真正了解研发项目管理的价值和意义,如果本文侵犯了您的权益或者您需要具体了解更多国内做研发项目管理系统的公司翼发云敏捷项目管理系统的相关信息,欢迎和我们联络:

【网址】www.effapp.com

2018-02-25T02:32:31+08:002018-02-25 02:32:31|Categories: scrum项目管理|