【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(2)创建数据库和数据模型

索引

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引

简述

我们创建一个数据库然后生成数据模型,添加ADO.NET实体数据模型,这里呢常用的有两种方式,一种是DbFirst,一种是CodeFirst,为了简便,我们使用DbFirst。有基础的朋友可以使用CodeFirst,对项目没有影响的。

项目准备

我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5

希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。

项目开始

一、创建数据库 wkmvc_db

创建数据库。。。咱就不多讲了,可以T-SQL(方便移植),我就用最基本的来创建吧~~

二、我们创建一个用户表 

我们创建一个用户表,因为这个用户表我打算是给后台用户使用的,也就是管理员表,所以我们叫做SYS_USER

我们给这个表添加一些字段属性

数据库名:wkmvc_db
表名:SYS_USER
 
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
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

 

T-SQL:

USE [wkmvc_db]
GO
/****** Object:  Table [dbo].[SYS_USER]    Script Date: 2016/5/9 15:30:30 ******/
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
View Code

然后,我们新建个登录用户 sa_wkmvc 密码 就123456 啦,并且添加用户映射

安全性→登录名→新建登录名

 

 

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

在我们的Domain中,我们添加一个ADO.NET实体数据模型 叫做Sql_Wkdb

右击Domain→添加→ADO.NET实体数据模型 Sql_Wkdb

 

 

选择来自数据库的EF设计器(DbFirst)

 

下一步,然后点击新建连接,因为我是本地的数据库,所以我的服务器名称我写个.,选择 使用SQL Server 身份验证 ,并且选择或输入我们要连接的数据库名称

 

点击确定,然后我们更改一下 连接设置配置文件,我们存为Entities

 

选择版本

 

更改一下模型的命名空间为Domain

 

OK,实体数据模型创建成功!

 

我们来新建个配置类 MyConfig.cs,用于数据库连接字符串的提取(上学的时候老师讲的一般是在公共操作类DBHelper中定义const string strConnectionString = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString)

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Configuration;
  4 using System.Data;
  5 using System.Linq;
  6 using System.Text;
  7 
  8 namespace Domain
  9 {
 10     /// <summary>
 11     /// 数据库连接字符串提取操作
 12     /// 字符串对应应用程序中配置文件
 13     /// 模型对应Domain中的数据库模型Context.cs构造函数
 14     /// </summary>
 15     public class MyConfig : Entities
 16     {
 17         /// <summary>
 18         /// 封装EF实体模型,供Dao使用,
 19         /// </summary>
 20         public System.Data.Entity.DbContext db { get; private set; }
 21 
 22         public MyConfig()
 23         {
 24             //实例化EF数据上下文
 25             db = new Entities();//注:Entities()要修改成与EF上下文统一
 26         }
 27 
 28         #region 连接数据库配置
 29         /// <summary>
 30         /// 数据库连接字符串
 31         /// </summary>
 32         public static string DefaultConnectionString = "";
 33         /// <summary>
 34         /// 通用数据库链接对象配置
 35         /// </summary>
 36         public static IDbConnection DefaultConnection
 37         {
 38             get
 39             {
 40                 IDbConnection defaultConn = null;
 41                 //数据库类型
 42                 string action = ConfigurationManager.AppSettings["daoType"];
 43                 switch (action)
 44                 {
 45                     //case "oracle":
 46                     //    defaultConn = new Oracle.ManagedDataAccess.Client.OracleConnection();
 47                     //    DefaultConnectionString = ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString;
 48                     //    break;
 49                     case "mssql":
 50                         defaultConn = new System.Data.SqlClient.SqlConnection();
 51                         DefaultConnectionString = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString;
 52                         break;
 53                     default:
 54                         break;
 55                 }
 56                 return defaultConn;
 57             }
 58         }
 59         /// <summary>
 60         /// 构造数据库连接字符串 注:数据库切换要修改
 61         /// </summary>
 62         public static string DataBaseConnectionString(string EntityName)
 63         {
 64             IDbConnection con = DefaultConnection;
 65             return EFConnectionStringModle(EntityName, DefaultConnectionString);
 66         }
 67         /// <summary>
 68         /// 构造EF使用数据库连接字符串
 69         /// </summary>
 70         /// <param name="EntityName">数据上下文坏境</param>
 71         /// <param name="DBsoure">数据字符串</param>
 72         static string EFConnectionStringModle(string EntityName, string DBsoure)
 73         {
 74             return string.Concat("metadata=res://*/",
 75                 EntityName, ".csdl|res://*/",
 76                 EntityName, ".ssdl|res://*/",
 77                 EntityName, ".msl;provider=System.Data.SqlClient;provider connection string='",
 78                 DBsoure, "'");
 79 
 80         }
 81         #endregion
 82 
 83         #region SQL拦截器
 84         /// <summary>
 85         /// 配置EF执行SQL拦截器
 86         /// </summary>
 87         //public static void EFTracingConfig(log4net.ILog log4net)
 88         //{
 89         //    //注册拦截器
 90         //    EFTracingProviderConfiguration.RegisterProvider();
 91         //    //SQL日志
 92         //    log4net.ILog log = null;
 93         //    bool isdebug = (ConfigurationManager.AppSettings["isdebug"] == "true");
 94         //    if (isdebug)
 95         //    {
 96         //        log = log4net;
 97         //    }
 98         //    EFTracingProviderConfiguration.LogToLog4net = log;
 99         //}
100         #endregion
101 
102     }
103 }
View Code

Oralce的咱们暂时不用我注释了

 

下一篇,我们就来创建个公共操作接口和实现类,还有Spring注入,有不太了解的提前预习一下~~ 再次感谢大家的关注,这个东西并不是一个很成熟的东西,所以,大家如果提出更好的解决方案或者其它问题,我会及时修改的。

 

原创文章 转载请尊重劳动成果 http://yuangang.cnblogs.com

posted @ 2016-05-09 15:57  果冻布丁喜之郎  阅读(64334)  评论(133编辑  收藏  举报