ASP.NET 5:初始化数据库
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.NET 5:初始化数据库的更多相关文章
- 采用异步来实现重新连接服务器或者重新启动服务 C#中类的属性的获取 SignalR2简易数据看板演示 C#动态调用泛型类、泛型方法 asp .net core Get raw request. 从壹开始前后端分离[.NetCore 不定期更新] 38 ║自动初始化数据库
采用异步来实现重新连接服务器或者重新启动服务 开启异步监听,不会导致主线程的堵塞,在服务异常断开后一直检测重新连接服务,成功连接服务后通知各个注册的客户端! #region 检测断线并重连OPC服务 ...
- ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 设置和初始化数据库 上一章节中我们已经设置和配置好了 EF ...
- ASP.NET CORE RAZOR :初始化数据库
官方说法是:设定数据库种子https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/sql 应用背景:初次部署系统时,设定一 ...
- 【EF6学习笔记】(一)Code First 方式生成数据库及初始化数据库实际操作
本篇参考原文地址: Creating an Entity Framework Data Model 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整 ...
- EF6 学习笔记(一):Code First 方式生成数据库及初始化数据库实际操作
EF6 学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文地址: Creating an Entity Framework Data Model 说明:学习 ...
- ASP.NET操作ORACLE数据库之模糊查询
ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...
- ASP.NET 连接MySQL数据库 详细步骤
ASP.NET默认的数据库是MS SQL Server,微软的数据库产品.事实上,如果不计成本因素的话,Windows Server + IIS + MS SQL Server + ASP.NET是网 ...
- ASP.NET连接Oracle数据库的步骤详解(转)
ASP.NET连接Oracle数据库的步骤详解 本文我们主要介绍了ASP.NET连接Oracle数据库的步骤及每个步骤需要进行的设置,希望能够对您有所帮助. 在用ASP.NET开发应用程序时, ...
- Entity FrameWork初始化数据库的四种策略
程序猿就是苦逼,每天还得分出一些时间去写博文.天真的很热,今天就随便写一点啦! 1.EF初始化数据库的四中策略 EF可以根据项目中的模型自动创建数据库.下面我们就分类看看Entity Framewor ...
随机推荐
- Codeforces Round #256 (Div. 2)——Multiplication Table
题目链接 题意: n*m的一个乘法表,从小到大排序后,输出第k个数 (1 ≤ n, m ≤ 5·105; 1 ≤ k ≤ n·m) 分析: 对于k之前的数,排名小于k:k之后的数大于,那么就能够採用 ...
- 10624 - Super Number
题目链接 题意:给出n到m的范围,求出一个数在前i位数组成的数字能被i整除.假设存在输出这个数,假设不存在.输出-1. 思路:回溯,每次放第i位,然后推断是否符合题意.这题踩着时间过去的2.6s(看了 ...
- Coco2d-x android win7 Python 游戏开发环境的搭建
1:我用的电脑配置 win7 3 核 内存8G 桌面.一直想学习Coco2d 游戏开发,所以,一个星期后,需要找到,最终建立了一个良好的环境 2:我使用的版本号版本号,至于建筑android开发环境略 ...
- 使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历
原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇到需要向SQL Server插入批量数据,然后在存储过程中对这些数据进行进一步处理的情况.存储过 ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式公布
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...
- Timer Swing
一个Swing的例子,按钮控件上中文出现乱码: 试了网上的设置Font,或将汉字使用new String(str.getBytes(),"GBK")对展示的汉字进行编码.都无效. ...
- 微软自家Dism的妙用
很多人应该都听说过Dism,是微软自带的工具,其实自从Win8发布以来Dism的功能就大幅度增强了,大家都知道系统里面有个打开关闭Windows功能, 但是在这里你只能关闭这些功能,却不能删除他们. ...
- hdu4288 Coder 2012成都网络赛 A题
题意:往集合里面添加删除数,集合中的数是按从小到大排列的,询问下标模5等于3的数的和. 记得当时这题不会做, 现在想简单多了,只要维护五个值和左右子树的size大小就行了. #define maxn ...
- 超可爱 纯CSS3实现的小猪、小老鼠、小牛
原文:超可爱 纯CSS3实现的小猪.小老鼠.小牛 利用纯CSS3绘制一些人物.动物.风景已经不是一件新鲜的事情了,主要是利用CSS3可以让直线变成任意的曲线,于是简单的矢量图形绘制对CSS3来说就小菜 ...
- java maven quartz exampe 实用指南
pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...