【无私分享:从入门到精通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
我们给这个表添加一些字段属性
|
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
然后,我们新建个登录用户 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 }
Oralce的咱们暂时不用我注释了
下一篇,我们就来创建个公共操作接口和实现类,还有Spring注入,有不太了解的提前预习一下~~ 再次感谢大家的关注,这个东西并不是一个很成熟的东西,所以,大家如果提出更好的解决方案或者其它问题,我会及时修改的。
原创文章 转载请尊重劳动成果 http://yuangang.cnblogs.com