MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求

时间:2021-09-05 08:12:15

MVC5中Model层开发数据注解

 

ASP.NET MVC5中Model层开发,使用的数据注解有三个作用:

  1. 数据映射(把Model层的类用EntityFramework映射成对应的表)
  2. 数据验证(在服务器端和客户端验证数据的有效性)
  3. 数据显示(在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]

可视化设计器在引用组件成员时可以显示指定的说明

(命名空间:System.ComponentModel.DescriptionAttribute

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为例)

  MVC5中Model层开发数据注解    EF Code First Migrations数据库迁移  C# 常用对象的的修饰符  C# 静态构造函数  MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求

  1. 通过Browser发过请求给IIS(get/post)
  2. IIS得到请求后,再把请求转给aspnet_iisapi.dll处理,通过asp.net的一些框架的东西的调用,再使用Routing路由功能,查询相应的Controller
  3. 再从相应的Controller中查询Action
  4. 在Action中,通过调用BLL,DAL,EL一些组件做相应的数据处理
  5. 从Action得到相应的数据后,再通过ViewDate 或 Model把数据传给View
  6. 在View中把数据显示出来,传回过Browser展示