Asp.net MVC系列教程2——创建数据库和数据模型

作者 Guanghui Wang 日期 2017-02-15

简述

本文转自http://yuangang.cnblogs.com并加以整理。 以下内容介绍了数据库、表格创建,EF模型创建和数据库连接字符串的提取类。

索引

Asp.net MVC项目系列教程

项目开始

一、创建一个数据库和用户表

序号 列名 数据类型 长度 小数位 允许空 说明
1 ID int 4 0 主键ID
2 NAME nvarchar 50 0 真实姓名
3 ACCOUNT nvarchar 20 0 用户帐号
4 PASSWORD nvarchar 1000 0 用户密码
5 ISCANLOGIN int 4 0 是否锁定(0否1是)
6 SHOWORDER1 int 4 0 部门内的排序
7 SHOWORDER2 int 4 0 公司内的排序
8 PINYIN1 nvarchar 50 0 姓名全拼
9 PINYIN2 nvarchar 50 0 姓名首字符
10 FACE_IMG nvarchar 200 0 用户头像
11 LEVELS nvarchar 36 0 级别(对接SYS_CODE)
12 DPTID nvarchar 36 0 主部门ID,用户所在的部门
13 CREATEPER nvarchar 36 0 创建者
14 CREATEDATE datetime 8 3 创建时间
15 UPDATEUSER nvarchar 36 0 修改者
16 UPDATEDATE datetime 8 3 修改时间
17 LastLoginIP nvarchar 50 0 最后一次登录IP
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
USE [wkmvc_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[SYS_USER](
[ID] [int] IDENTITY(1,1) NOT NULL,
[NAME] [nvarchar](50) NULL,
[ACCOUNT] [nvarchar](20) NULL,
[PASSWORD] [nvarchar](1000) NULL,
[ISCANLOGIN] [int] NULL,
[SHOWORDER1] [int] NULL,
[SHOWORDER2] [int] NULL,
[PINYIN1] [nvarchar](50) NULL,
[PINYIN2] [nvarchar](50) NULL,
[FACE_IMG] [nvarchar](200) NULL,
[LEVELS] [nvarchar](36) NULL,
[DPTID] [nvarchar](36) NULL,
[CREATEPER] [nvarchar](36) NULL,
[CREATEDATE] [datetime] NULL,
[UPDATEUSER] [nvarchar](36) NULL,
[UPDATEDATE] [datetime] NULL,
[LastLoginIP] [nvarchar](50) NULL,
CONSTRAINT [PK_SYS_USER] PRIMARY KEY CLUSTERED
(
[ID] 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
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'真实姓名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'NAME'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户帐号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'ACCOUNT'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户密码' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'PASSWORD'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否锁定(0否1是)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'ISCANLOGIN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'部门内的排序' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'SHOWORDER1'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'公司内的排序' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'SHOWORDER2'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名全拼' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'PINYIN1'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名首字符' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'PINYIN2'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户头像' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'FACE_IMG'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'级别(对接SYS_CODE)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'LEVELS'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主部门ID,用户所在的部门' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'DPTID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建者' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'CREATEPER'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'CREATEDATE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'修改者' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'UPDATEUSER'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'修改时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'UPDATEDATE'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后一次登录IP' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_USER', @level2type=N'COLUMN',@level2name=N'LastLoginIP'
GO

二、添加ADO.NET实体数据模型 Sql_Wkdb

  1. 在我们的Domain中,我们添加一个ADO.NET实体数据模型叫做Sql_Wkdb
  2. 右击Domain→添加→ADO.NET实体数据模型 Sql_Wkdb
  3. app.config连接改成Entities
  4. 模型命名空间改成Domain

三、新建配置类 MyConfig.cs,用于数据库连接字符串的提取

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System.Configuration;
using System.Data;

namespace Domain
{
/// <summary>
/// 数据库连接字符串提取操作
/// 字符串对应应用程序中配置文件
/// 模型对应Domain中的数据库模型Context.cs构造函数
/// </summary>
public class MyConfig : Entities
{
/// <summary>
/// 封装EF实体模型,供Dao使用,
/// </summary>
public System.Data.Entity.DbContext db { get; private set; }

public MyConfig()
{
//实例化EF数据上下文
db = new Entities();//注:Entities()要修改成与EF上下文统一
}

#region 连接数据库配置
/// <summary>
/// 数据库连接字符串
/// </summary>
public static string DefaultConnectionString = "";
/// <summary>
/// 通用数据库链接对象配置
/// </summary>
public static IDbConnection DefaultConnection
{
get
{
IDbConnection defaultConn = null;
//数据库类型
string action = ConfigurationManager.AppSettings["daoType"];
switch (action)
{
//case "oracle":
// defaultConn = new Oracle.ManagedDataAccess.Client.OracleConnection();
// DefaultConnectionString = ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString;
// break;
case "mssql":
defaultConn = new System.Data.SqlClient.SqlConnection();
DefaultConnectionString = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString;
break;
default:
break;
}
return defaultConn;
}
}
/// <summary>
/// 构造数据库连接字符串 注:数据库切换要修改
/// </summary>
public static string DataBaseConnectionString(string entityName)
{
IDbConnection con = DefaultConnection;
return EFConnectionStringModle(entityName, DefaultConnectionString);
}
/// <summary>
/// 构造EF使用数据库连接字符串
/// </summary>
/// <param name="entityName">数据上下文坏境</param>
/// <param name="dbSource">数据字符串</param>
static string EFConnectionStringModle(string entityName, string dbSource)
{
return string.Concat("metadata=res://*/",
entityName, ".csdl|res://*/",
entityName, ".ssdl|res://*/",
entityName, ".msl;provider=System.Data.SqlClient;provider connection string='",
dbSource, "'");
}
#endregion

#region SQL拦截器
/// <summary>
/// 配置EF执行SQL拦截器
/// </summary>
//public static void EFTracingConfig(log4net.ILog log4net)
//{
// //注册拦截器
// EFTracingProviderConfiguration.RegisterProvider();
// //SQL日志
// log4net.ILog log = null;
// bool isdebug = (ConfigurationManager.AppSettings["isdebug"] == "true");
// if (isdebug)
// {
// log = log4net;
// }
// EFTracingProviderConfiguration.LogToLog4net = log;
//}
#endregion

}
}

四、把EF添加到Webpage项目中

  • 通过nuget添加EntityFramework
  • 拷贝Domain/app.config connectionString到Webpage的web.config中

总结

下一篇,我们就来创建个公共操作接口和实现类,还有Spring注入,再次感谢作者和大家的关注!