ASP.NET 5:初始化数据库

1.初始化数据库

  • 1.2目录

这不是专述模式/架构设计的帖子,架构搭建以讲解文章为目的,先不过多分层。

截这个图也是便于你对应下面找代码文件路径!

  • 1.2代码

先控制台应用程序来演示。(比较蛋疼,MS针对ASP.NET 5测试框架在beta1版中,可用XUnit.KRunner。beta2中我也不知道用那个?)

不管你用不用EF?传统做法先设计数据库,但写代码面向对象开发时还是要设计实体(模型),为了方便映射实体的属性和数据库字段是一一对应(也可以通过Fluent API配置,实体属性设计和字段不对应)。实体可以当作业务对象,视图模型,传输对象。但根据需要这些对象或模型属性不一定和数据库字段一致,可以另外定义。

我们先设计一个实体基类(还是那句话,仅供讲解,代码不全或不严谨,理解万岁啦!):

using System.ComponentModel.DataAnnotations;

namespace BlogASPNET5.Entity.Bases
{
/// <summary>
/// 实体基类
/// </summary>
/// <typeparam name="T">主键类型</typeparam>
public class EntityBase<T>
{
[Key]
public T Id { get; set; } //记录创建时间
//是否删除
//行版本
}
}

注:EF对于主键类型为整型和Guid类型,其属性为Id或类名+Id(不分大小写),可以不用标注Key;整型便于阅读;Guid便于数据合并;也可以字符串。所以这里用到泛型,继承时再决定什么类型。

下面再定义Account相关的角色实体:

using BlogASPNET5.Entity.Bases;
using System.Collections.Generic; namespace BlogASPNET5.Entity.Accounts
{
/// <summary>
/// 角色实体
/// </summary>
public class Role :EntityBase<int>
{
public string Name { get; set; }
public string Description { get; set; } /// <summary>
/// 导航属性 (后面演示Redis时,不要导航属性)
/// </summary>
public ICollection<User> Users { get; set; }
}
}

Account相关的用户实体:

using BlogASPNET5.Entity.Bases;

namespace BlogASPNET5.Entity.Accounts
{
public class User : EntityBase<int>
{
public string Name { get; set; }
public string Password { get; set; }
public Gender Gender { get; set; } /// <summary>
/// 角色Id 外键
/// </summary>
public int RoleId { get; set; } /// <summary>
/// 导航属性
/// </summary>
public Role Role { get; set; } } /// <summary>
/// 性别 枚举类型
/// </summary>
public enum Gender { man, woman }
}

注:EF7又不支持复杂类型(其实通过继承即可),但枚举类型支持保留;(后面使用Redis,导航属性就没用了)。

既然要用EF来创建数据库及初始化数据,需要EF操作上下文类:

using BlogASPNET5.Entity.Accounts;
using Microsoft.Data.Entity;
using Microsoft.Data.Entity.Metadata; namespace BlogASPNET5.Repository.Contexts
{
public class EFContext :DbContext
{
public DbSet<Role> Roles { get; set; }
public DbSet<User> Users { get; set; } protected override void OnConfiguring(DbContextOptions options)
{
options.UseSqlServer("Server=.;Database=TestDB;UID=sa;PWD=123456;");
} protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//多对一关系及指定外键
modelBuilder.Entity<User>().ManyToOne(r => r.Role, u => u.Users).ForeignKey(f => f.RoleId);
}
}
}

定义初始化数据库方法:

using BlogASPNET5.Entity.Accounts;
using BlogASPNET5.Repository.Contexts;
using System.Linq; namespace BlogASPNET5.Repository.Migrations
{
public static class SampleData
{
static EFContext db = new EFContext(); public static void SetData()
{
db.Database.EnsureDeleted();
db.Database.EnsureCreated(); db.Add(
new Role { Name = "manage", Description = "管理员" },
new Role { Name = "member", Description = "会员" });
db.SaveChanges(); //嘛蛋,CoreCLR没随机函数,循环啦
for (int i = 1; i <= 1000; i++)
{
db.Add(
new User
{
Name = "admin" + i,
Password = "abc" + i,
Gender = Gender.man,
Role = db.Roles.Single(r => r.Name == "manage")
});
db.SaveChanges();
} for (int i = 1; i <= 1000; i++)
{
db.Add(
new User
{
Name = "member" + i,
Password = "efg" + i,
Gender = Gender.woman,
Role = db.Roles.Single(r => r.Name == "member")
});
db.SaveChanges();
}
}
}
}
  • 1.3调用

在控制台程序调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using BlogASPNET5.Repository.Contexts;
using BlogASPNET5.Repository.Migrations;
using System;
 
namespace BlogASPNET5.ConsoleApp
{
    public class Program
    {
        public void Main(string[] args)
        {
 
            //初始化数据,创建完了注释掉    
            SampleData.SetData();
 
            Console.WriteLine("set data OK!");
            Console.ReadLine();
 
            using (var db = new EFContext())
            {
                var lists = db.Users;
                foreach (var item in lists)
                {
                    Console.WriteLine(item.Name);
                }
            }
            Console.ReadLine();
        }
    }
}

结果就不截图了。 EF7 beta2又一个改进:创建出来的表,不再有MigrationHistory(看着不爽)这个表了。

2.小结

本篇先初始化数据库,下一章数据操作封装及查询分页。

打个“小广告 ”!欢迎志同道合的园友,加入QQ群:290576772(加时注明博客园)

 
分类: ASP.NET5

ASP.NET 5:初始化数据库的更多相关文章

  1. 采用异步来实现重新连接服务器或者重新启动服务 C#中类的属性的获取 SignalR2简易数据看板演示 C#动态调用泛型类、泛型方法 asp .net core Get raw request. 从壹开始前后端分离[.NetCore 不定期更新] 38 ║自动初始化数据库

    采用异步来实现重新连接服务器或者重新启动服务 开启异步监听,不会导致主线程的堵塞,在服务异常断开后一直检测重新连接服务,成功连接服务后通知各个注册的客户端! #region 检测断线并重连OPC服务 ...

  2. ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 设置和初始化数据库 上一章节中我们已经设置和配置好了 EF ...

  3. ASP.NET CORE RAZOR :初始化数据库

    官方说法是:设定数据库种子https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/sql 应用背景:初次部署系统时,设定一 ...

  4. 【EF6学习笔记】(一)Code First 方式生成数据库及初始化数据库实际操作

    本篇参考原文地址: Creating an Entity Framework Data Model 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整 ...

  5. EF6 学习笔记(一):Code First 方式生成数据库及初始化数据库实际操作

    EF6 学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文地址: Creating an Entity Framework Data Model 说明:学习 ...

  6. ASP.NET操作ORACLE数据库之模糊查询

    ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...

  7. ASP.NET 连接MySQL数据库 详细步骤

    ASP.NET默认的数据库是MS SQL Server,微软的数据库产品.事实上,如果不计成本因素的话,Windows Server + IIS + MS SQL Server + ASP.NET是网 ...

  8. ASP.NET连接Oracle数据库的步骤详解(转)

    ASP.NET连接Oracle数据库的步骤详解   本文我们主要介绍了ASP.NET连接Oracle数据库的步骤及每个步骤需要进行的设置,希望能够对您有所帮助.   在用ASP.NET开发应用程序时, ...

  9. Entity FrameWork初始化数据库的四种策略

    程序猿就是苦逼,每天还得分出一些时间去写博文.天真的很热,今天就随便写一点啦! 1.EF初始化数据库的四中策略 EF可以根据项目中的模型自动创建数据库.下面我们就分类看看Entity Framewor ...

随机推荐

  1. 第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器

    原文:第十九章--使用资源调控器管理资源(1)--使用SQLServer Management Studio 配置资源调控器 本系列包含: 1. 使用SQLServer Management Stud ...

  2. HDU 4819 Mosaic D区段树

    连接:pid=4819">http://acm.hdu.edu.cn/showproblem.php?pid=4819 意:给出一个800×800下面的矩阵.每次更新一个点的值为以这个 ...

  3. MEF初体验之八:过滤目录

    当在使用子容器的时候,基于某些具体标准来过滤目录可能是重要的.例如,基于部件的创建策略来过滤是很常见的.下面的代码片段演示了如何构建这种特别方法: var catalog = new Assembly ...

  4. Smart Framework

    Smart Framework:轻量级 Java Web 框架 发表于2年前(2013-09-01 08:39)   阅读(48569) | 评论(188) 544人收藏此文章, 我要收藏 赞83 阿 ...

  5. RH253读书笔记(5)-Lab 5 Network File Sharing Services

    Lab 5 Network File Sharing Services Goal: Share file or printer resources with FTP, NFS and Samba Se ...

  6. cocos2dx 使得单麻将(三)

    cocos2dx 使得单麻将(三) 麻将逻辑4.得到手牌数据 我们已经保存了一个一维数组, 类似于一个表格,统计出全部牌相应的数量, 但我们如何得到当前手中是什么牌呢 //扑克转换 BYTE Swit ...

  7. php用空格代替标点符号

    php作为常规赛的符号替换为空格 <? php $character = "!@#$%^&*于'纸'纸'文().,<>|[]'\":;}{-_+=? /a ...

  8. NSIS:禁止选择安装路径和编辑安装目录

    原文 NSIS:禁止选择安装路径和编辑安装目录 如果你想在安装包中禁止用户选择安装路径和编辑安装目录,有两种方式.   第一种:注释或删除安装目录选择页面 1 ;!insertmacro MUI_PA ...

  9. git - 简明指南(转)

    安装 下载 git OSX 版 下载 git Windows 版 下载 git Linux 版 创建新仓库 创建新文件夹,打开,然后执行  git init 以创建新的 git 仓库. 检出仓库 执行 ...

  10. Oracle 数据恢复指导具体解释

    1.数据恢复指导 : 高速检測.分析和修复故障 最大程度地降低停机故障和执行时故障 将对用户的干扰降到最低 用户界面:    --EM GUI 界面 (多个路径)    --RMAN 命令行 支持的数 ...