MVC5中Model层开发数据注解
ASP.NET MVC5中Model层开发,使用的数据注解有三个作用:
- 数据映射(把Model层的类用EntityFramework映射成对应的表)
- 数据验证(在服务器端和客户端验证数据的有效性)
- 数据显示(在View层显示相应的数据)
数据注解相关的命名空间如下:
DataAnnotations名称空间中包含主要的数据注解,Schema名称空间中包含一些数据映射的数据注解,Mvc名称空间中包含字符、数组、数值长度和属性比较的数据注解,Security名称空间中包含MemberShipPassword注解特性。
数据映射和验证相关的数据注解:
[Required] | 必填字段 |
[MaxLength] | 指定属性中允许的数组或字符串数据的最大长度 |
[MinLength] | 指定属性中允许的数组或字符串数据的最小长度 |
[StringLength] | 指定最小和最大字符长度 |
[Range] | 指定数值范围 |
数据验证相关的数据注解:
[Remote] | 使用 jQuery 验证插件远程验证程序的特性 |
[FileExtension] | 验证文件扩展名 |
[Compare] | 比较两个属性的值 |
[RegularExpression] | 使用正则表达式验证 |
[CustomValidation] | 自定义验证方法 |
[DataType] | 指定要与数据字段关联的附加类型的名称 |
[EmailAddress] | 电子邮件地址(相当于[DataType(DataType.Email)]) |
[Phone] | 电话(同上) |
[CreditCard] | 信用卡号码(同上) |
[Url] | 验证URL(同上) |
[MemberShipPassword] | 验证密码字段是否满足成员资格提供程序的当前密码要求 |
数据映射相关的数据注解:
[Key] | 主键字段 |
[Column] | 数据库列属性映射 |
[NotMapped] | 不要创建对应的字段 |
[Table] | 指定类将映射到的数据库表 |
[ForeignKey] | 表示关系中用作外键的属性 |
[DatabaseGenerated] | 指定数据库生成属性值的方式(EF不追踪属性的变化) |
数据显示相关的数据注解:
[DisplayName] | 指定本地化的字符串(习惯用语类) |
[Display] | 指定本地化的字符串(习惯用语属性) |
[DisplayFormat] | 设置数据字段的格式 |
[ReadOnly] | 指定该特性所绑定到的属性是只读属性还是读/写属性 |
[EditAble] | 指示数据字段是否可编辑 |
[HiddenInput] | 指示是否应将属性值或字段值呈现为隐藏的 input 元素 |
[ScaffoldColumn] | 指定类或数据列是否使用基架 |
[UIHint] | 指定动态数据用来显示数据字段的模板 |
其他
[DisplayColumn] | 将所引用的表中显示的列指定为外键列 |
[Description] |
可视化设计器在引用组件成员时可以显示指定的说明 |
1、数据验证相关的数据注解继承ValidationAttribute类,都有一个ErrorMessage属性用来显示错误提示。
如:[Required(ErrorMessage="此项不能为空")]。
2、数据映射中Int类型和DateTime类型在数据库中默认不允许为NULL,如果需要设置为NULL,使用可空类型即可(使用Int?或者DateTime?)。
初学ASP.NET MVC顺便总结了一下数据注解(并不包含所有的内置数据注解),每个数据注解的具体使用请查询MSDN,不当的地方望指正。
EF Code First Migrations数据库迁移
1>、在程序包管理器控制台,执行语句:
PM> Enable-Migrations -EnableAutomaticMigrations
执行成功后,应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。
2>、在程序包管理器控制台,执行语句:
PM> Add-Migration InitialCreate
执行成功后,在Migrations文件夹中新增类文件 年月日时分秒_InitialCreate.cs
3>、在程序包管理器控制台,执行语句:
PM> Update-Database -Verbose
执行结果生成与上面一致的数据库
4>、在数据库模型中添加Model类,执行程序包管理器控制台语句,Migrations文件夹中新增类文件年月日时分秒_Model类.cs。
PM> Add-Migration Model类
再次执行程序包管理器控制台语句
PM> Update-Database -Verbose
版本回溯
修改数据库中表Model类对应的表。在程序包管理器控制台中执行以下两条语句:
PM> Add-Migration ModifyCity
PM> Update-Database -Verbose
执行成功之后,Model表结构修改了
执行程序包管理器控制台语句,进行数据库版本回溯。
PM> Update-Database –TargetMigration: 对就在的Migrations文件夹下的cs文件
C# 常用对象的的修饰符
class(类)
1.internal 表示类只能在当然程序集中访问,类默认修饰符
2.public 表示所有地方都可以访问,与internal是互斥的
3.abstract 抽象类,不能被实例化,只能继承
4.sealed 密封类,不能被继承,与astract是互斥的
interface(接口)
1.public 表示所有的地方都可以访问,接口默认修饰符
2.internal 表只能在当然程序集只访问
注:接口不能用abstract与sealed,这对接口来说,没有意义
类的成员(字段,方法,属性)
1.private 只有当前类的内部能访问,成员的默认修饰符
2.protected 只有当前类或从当前类的子类能访问
3. internal 当前程序集能访问
4. internal protected 当前程序集中继承他的子类可以访问
5. public 没有限制
6. static 表中成员为静态成功,可与以*问修饰符一起使用,表示类本身调用,不能使用实例对象调用
7. readonly 只对字段有效,可与其它修饰符使用,表中只读字段
方法的其它修饰符
1.virtual 表示方法可以被重写
2.abstract 表示方法必须被重写,是没有方法体的,有抽象方法的类必须为抽象类
3.override 表示重写基类中的方法
4.extern 表示方法定义在其它地方
5.new 表示派生类的类方法隐藏基类方法;
6.this 表示指向当前类实例引用,
7.base 表示关键字指向基类实例引用
接口的成员(字段,方法,属性)
1.public ,一般不用手动写,默认就是public
C# 静态构造函数
•静态构造函数既没有访问修饰符,也没有参数。
•如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。
•在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
•如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。
•如果类中的静态字段带有初始化,则静态字段的初始化语句将在静态构造函数之前运行。
•一个类只能有一个静态构造函数。
•无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
•最多只运行一次。
•静态构造函数不可以被继承
MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上)
有A数据库服务器,B本机;
我现在想通过在B机器上通过代码调用SQL来执行A数据库的备份到B机器上
调用的SQL语句为:Backup
Database
MYDATABASE
To
Disk=
'D:/test.bak'
,这样备份的目录是数据库服务器A的D盘下;
怎么才能备份到A的D盘下呢?
请各位给予建议,谢谢!
----------------------------------------------------------------------------------------------------
要用远程数据库可以备份本地。
本地数据库也可以备份到远程。
--备份环境:把数据库服务器(192.168.1.8)的数据库(TEST)备份到(192.168.1.145)的C$下
--首先,做一个与客户端的映射
exec
master..xp_cmdshell
'net use z: \\192.168.1.145\c$ "密码" /user:192.168.1.145\administrator'
/*
--说明:
z: 是映射网络路径对应本机的盘符,与下面的备份对应
\\192.168.1.145\c$ 是要映射的网络路径
192.168.1.145\administrator
192.168.1.145是远程的计算机名,administrator是登陆的用户名
密码 上面指定的administrator用户的密码
--*/
--其次,进行数据库备份
backup
database
TEST
to
disk=
'z:\Test.bak'
--最后.备份完成后删除映射
exec
master..xp_cmdshell
'net use z: /delete'
--来自网络
--以下代码放在作业里做调度,自动备份、自动删除4天前备份
--创建映射
exec
master..xp_cmdshell
'net use w: \DatabaseBackup$ "password"/user:Roy'
,NO_OUTPUT
go
-----2000用游标:
declare
@s nvarchar(200),@del nvarchar(200)
select
@s=
''
,@del=
''
declare
datebak
cursor
for
select
[bak]=
'backup database '
+quotename(
Name
)+
' to disk ='
'w:'
+
Name
+
'_'
+
convert
(
varchar
(8),getdate(),112)+
'.bak'
' with
init'
,
[del]=
'exec master..xp_cmdshell '
' del w:'
+
Name
+
'_'
+
convert
(
varchar
(8),getdate()-4,112)+
'.bak'
', no_output'
from
master..sysdatabases
where
dbid>4
--不备份系统数据库
open
datebak
fetch
next
from
datebak
into
@s,@del
while @@fetch_status=0
begin
exec
(@del)
exec
(@s)
fetch
next
from
datebak
into
@s,@del
end
close
datebak
deallocate
datebak
go
--删除映射
exec
master..xp_cmdshell
'net use w: /delete'
go
--用JOB.
--SQL SERVER2000为例
企业管理器—>数据库服务器—>管理目录—>SQL SERVER代理—>作业—>右键 选—>新建
常规选项页—>输入作业名称—>选中所有者。
步骤选项页—>新建—>输入步骤名—>类型 TSQL脚本—>选择需要执行的数据库—>在命令框里输入你的SQL 脚本:
如:
update
tb
set
状态= ...
where
日期...........
你可以点左下角的【分析】按钮,分析一下语法,分析无误,按确定。
调度选项页—>新建调度—>输入调度名称—>调度类型 你可以选择也可以点右下角的【更改】按钮进行更改,确定。
任务栏 SQL SERVER服务器的小图标 双击 服务 选中 SQL SERVER AGENT,点【开始/继续】,选中当启动OS时,自动启动服务,就可以了。
到你定的那个时间点,SQL SERVER会自动去执行你的脚本的。
如果需要生成脚本的话,企业管理器—>数据库服务器—>管理目录—>SQL SERVER代理—>作业—>右键你刚完成的作业—>所有任务
—>生成SQL脚本,即可生成你需要的脚本
MVC 的HTTP请求
MVC 的HTTP请求过程(以IIS为例)
- 通过Browser发过请求给IIS(get/post)
- IIS得到请求后,再把请求转给aspnet_iisapi.dll处理,通过asp.net的一些框架的东西的调用,再使用Routing路由功能,查询相应的Controller
- 再从相应的Controller中查询Action
- 在Action中,通过调用BLL,DAL,EL一些组件做相应的数据处理
- 从Action得到相应的数据后,再通过ViewDate 或 Model把数据传给View
- 在View中把数据显示出来,传回过Browser展示