114网站制作,可以做编程题的网站,网站建设有关模板,惠州网站公司在开发应用程序的过程中#xff0c;经常需要处理许多大大小小的数据#xff0c;例如#xff0c;SQL Server数据库存取、连接AD(Active Directory#xff09;数据库进行验证、调用外部Web Service取得数据等。除了访问数据外#xff0c;也经常需要对数据做成格式验证、逻辑… 在开发应用程序的过程中经常需要处理许多大大小小的数据例如SQL Server数据库存取、连接AD(Active Directory数据库进行验证、调用外部Web Service取得数据等。除了访问数据外也经常需要对数据做成格式验证、逻辑验证等等。 一、Model的责任 在ASP.NET MVC中Model负责所有与“数据”有关的任务。所以不管是Controller或是View都会参考到Model里定义的所有数据类型或是用到Model里定义的一些数据操作方法例如新增、删除、更改、查询等。 在Model里的程序由于“只能”跟数据域商业逻辑有关所以就不负责处理所有与数据处理无关的事或是用来控制网站的运行流程等而是专注于如何有效率地提供数据访问机制、交易环境、数据格式验证、商业逻辑验证等工作。 由于Model的独立性非常高如果你在一个Visual Studio方案中有多个要开发的项目比如有时我们会将Model独立成一个项目让Model项目共享于不同的项目之间。 二、开发Model的基本观念 当采用ASP.NET MVC框架时虽然在Model层的开发技术繁多而且ASP.NET MVC也保留了许多弹性让各个不同的数据访问技术都能跟ASP.NET MVC集成。不过若要充分发挥ASP.NET MVC快速开发的优势还是建议读者在Model层采用ORM信息访问技术来开发例如LINQ to SQL、Entity Framework、NHibernate、Telerik OpenAccess ORM等。 1.何谓ORM ORM的全名是Object Relational Mapping中文翻译为“对象关系映射”是一种编程技术用于实现面向对象程序语言里不同类型系统之间的数据转换。通常在实务的应用上大多数情况都会应用在数据库与面向对象程序自检的类型转换例如SQL Server中的关系型数据与.NET类型对象之间的转换等。 换句话说ORM是将结构化的关系型数据映射成面向对象模型。如果以Entity Framework来说就是试图将关系数据库的各种数据转换成.NET原生对象或是将.NET模型类对象数据转换成关系型数据。 使用ORM开发技术跟常规使用ADO.NET开发技术最大的差异就在于操作“数据”的方便性与弹性。以往在使用ADO.NET开发数据访问程序时开发人员通常必须先了解完整的数据库操作方法才能顺利地从数据库取得数据或是将对象的数据保存到数据库中。例如要编写操作SQL Server数据库中的数据就必须先学习T-SQL的使用方式若要操作Oracle数据库中的数据也必须先学习Oracle的SQL查询语法。学会之后还要学习各式ADO.NET的标准API才能知道如何正确地与数据库交互明白是要进行查询数据、更新数据、新增数据还是删除数据等。不同的数据库在设计逻辑与SQL语法上都会有些小差异而导致开发数据访问的程序代码缺乏效率。如此一来也有违“关注点分离”的特性若是套用“关注点分离”特性照理说在开发.NET应用程序时应该专注在对象的操作上而非数据库数据的处理当采用ORM开发技术后便可以帮助我们达到这个目的。 Entity Framwork是建构在ADO.NET数据提供者模型之上也就是说只要.NET运行环境能够使用ADO.NET连接数据库Enity Framework便能顺利支持在.NET运行环境下默认已经支持SQL Server 2005以上版本如果要支持其他如Oracle、MySQL、SQLite、PostgreSQL等各式各样的关系数据库基本上也是没问题的只要操作出相对应的Entity Framework数据提供者即可。 2.数据库开发模式 采用Entity Framework或其他ORM开发极速有时还可区分三种不同的开发模式分别是数据库优先开发模式Database First Development)、模型优先开发模式Model First Development、程序代码优先开发模式Code First Development。 1数据库优先开发模式 顾名思义数据库优先开发模式就是针对数据库进行设计以数据库里定义的数据结构Schema为主。当应用程序在卡法的时候必须依据数据库的结构设计来进行开发使用的ORM框架必须能够依据数据库结构设计生成相应的对象模型才能提供给应用程序来使用。 2模型优先开发模式 模型优先开发模式是指在ORM架构中创建对象模型让应用程序能够依据这些对象模型进行开发。需要实际访问数据库时只要通过Entity Framework数据提供者的协助动态生成相应的SQL语法即可创建出完整的数据库。 一般来说支持模型优先开发模式的ORM框架都会有相对应的程序代码生成技术在模型被创建的同时自动生成相对应的程序代码。以Entity Framework为例在搭配Visual Studio的帮助下即可通过Entity Framework设计工具帮你创建对象模型只要保存后就会自动生成相关程序代码。 3程序代码优先开发模式 程序代码优先开发模式是一种非常新颖的开发模式也就是让开发人员直接依据需求编写类别与属性程序代码而这些撰写的类别与属性正是定义出应用程序所需的数据模型并且通过ORM框架的管理便可让这些POCO类型转换成实体模型Entity Model。 直到程序开始运行后通过ORM框架就可以自动依据这些类别定义创建数据库、表格、字段与其他数据结构Schema。这样开发人员便可以完全不需要接触数据库这一端的各种管理工作如创建表格字段、设计数据表、设计数据表关联等也不用学习各式数据库的使用差异如SQL Server、Oracle、MySQL、SQLite等省去这些工作之后开发人员更能专注在应用程序的需求开发而不会因为不熟悉数据库操作而束手束脚。 三、LocalDB介绍 微软最新推出的SQL Server 2012 Express LocalDB是一种SQL Server Express的运行模式特别适合在开发环境使用也内建在Visual Studio 2012之中。 1.LocalDB的运作方式 在安装好SQL Server 2012 Express LocalDB之后默认会有个实例名为v11.0。 2.如何连接LocalDB实例 1使用Management Studio连接LocalDB 在连接对话框中输入正确服务器名称(localdb)\v11.0。只有新版的SQL Server 2012 Management Studio才能识别这组新的服务器名称。 2通过.NET程序连接LocalDB实例 连接字符串如下。 Server(LocalDB)\v11.0; Integrated Securitytrue; AttachDbFileNameD:\Data\MyDB1.mdf 3.管理LocalDB自动实例 4.管理LocalDB具名实例 四、使用Code First创建数据模型 ASP.NET MVC4与当前最新版的Entity Framework 5同时上市尤其强化了程序代码优先开发模式的支持。 1.创建数据模型 1声明主键 要想在Entity Framework声明主键最简单的方式就是不要声明直接把属性名称设置为Id或是类名“Id”也可以并将该属性指派为int类型即可。EF Code First会自动识别出这个字段就是表格里的主键并且会加上自动编号的识别规格设置。 当希望使用其他域名当作主键时就可能遇到一些麻烦。可以加上key属性Attriute引用System.ComponentModel.DataAnnotations命名空间。 using System;
using System.ComponentModel.DataAnnotations;namespace MvcGuestbook.Models
{public class Guestbook{[Key]public int No { get; set; }public string Name { get; set; }}
} 2声明必填字段 声明为string的属性在数据库表格里的字段设置为NOT NULL。如果需要改为必填字段可以加上Required属性引用System.ComponentModel.DataAnnotations命名空间。 using System;
using System.ComponentModel.DataAnnotations;namespace MvcGuestbook.Models
{public class Guestbook{[Key]public int No { get; set; }[Required]public string Name { get; set; }}
} 3声明允许NULL字段 声明为DateTime的属性在数据库表格里的字段设置为NOT NULL。如果需要改变允许为空字段可以加上一个问号不需要引用任何命名空间。 using System;
using System.ComponentModel.DataAnnotations;namespace MvcGuestbook.Models
{public class Guestbook{[Key]public int No { get; set; }[Required]public string Name { get; set; }public string Emai { get; set; }[Required]public string Message { get; set; }public DateTime? CreatedOn { get; set; }}
} 4声明字段长度 我们也经常会在数据库中限定特定字段的字符串长度以方便日后创建字段索引可以使用MaxLength属性引用System.ComponentModel.DataAnnotations。 using System;
using System.ComponentModel.DataAnnotations;namespace MvcGuestbook.Models
{public class Guestbook{[Key]public int No { get; set; }[Required][MaxLength(5)]public string Name { get; set; }[MaxLength(200)]public string Emai { get; set; }[Required]public string Message { get; set; }public DateTime? CreatedOn { get; set; }}
} 也可以设置StringLength属性来限定字段长度。 Model类中为属性添加MaxLength说明需要引用 命名空间。 A.System.Linq B. System.ComponentModel C. System.ComponentModel.DataAnnotations D. System.Collection.Generic 5声明字段默认值 6声明特定属性不是数据库中的字段 只要数据模型中出现公开属性默认就会在数据库中创建一个对应的字段但如果在数据模型中的属性是一个动态计算的属性我们并不想在数据库中新增对应的字段时该怎么办可以加上NotMapped属性Attribute引用System.ComponentModel.DataAnotations.Schema。 using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;namespace MvcGuestbook.Models
{public class Guestbook{[Key]public int No { get; set; }[Required][MaxLength(5)]public string Name { get; set; }[MaxLength(200)]public string Emai { get; set; }[Required]public string Message { get; set; }[DatabaseGenerated(DatabaseGeneratedOption.Computed)]public DateTime? CreatedOn { get; set; }[NotMapped]public string FamilyName{get{return this.Name.Substring(0, 1);}set{this.Name value.Substring(0, 1) this.Name.Substring(1);}}}
} 使用EF Code First在模型中声明特定属性不是数据库中的字段应使用 关键字。 A.Key B.Required C.DisplayName D.NotMapped 7DisplayFormat 获取数据字段的显示格式。例如可用于设置日期的格式。 8DataType 获取与数据字段关联的类型。例如DataType.Date。 9DatabaseGeneratedOption DatabaeGeneratedOption.Computed计算列 DatabaseGeneratedOption.Identity标识自动加1 DatabaseGeneratedOption.None没有标识不自动加1 10Column 将类与数据库中的表相关。 [Column(“FirstName”)]public string FirstMidName{get;set;} 2.创建数据上下文类 数据上下文类在Entity Framework Code First开发模式下非常重要主要用来追踪与识别对象的变更追踪。少了这个类别Entity Framework就完全无法运作。 自动添加数据上下文类可以在添加控制器时操作。 public class MvcGuestbookContext : DbContext{public MvcGuestbookContext(): base(nameDefaultConnection){}public DbSetGuestbook Guestbooks { get; set; }} 构造函数中的DefaultConnection为连接字符串的名字这个连接字符串必须存储在web.config中。DbSetGuest类型的Guestbooks变量代表的是Guestbook这个类型的数据库集合对象。 如果希望将Guestbook数据模型被声明成只读不让应用程序对其写入任何数据那么可以修改数据上下文类让DbSet集合属性只提供get实体。 public class MvcGuestbookContext : DbContext{public MvcGuestbookContext(): base(nameDefaultConnection){}public DbSetGuestbook Guestbooks{get { return SetGuestbook(); }}} 3.设计模型之间的关联性 在设计数据库结构时当遇到表格与表格间有关联存在时一般会通过创建外键Foreign Key的方式设计表格之间的关联关系。 1设计模型之间的一对多关联 public class Guestbook{[Key]public int No { get; set; }[Required][MaxLength(5)]public string Name { get; set; }[MaxLength(200)]public string Emai { get; set; }[Required]public string Message { get; set; }public virtual Member Member { get; set; }} public class Member{public int Id { get; set; }[Required][MaxLength(5)]public string Username { get; set; }[MaxLength(10)]public string Password { get; set; }public DateTime? LastLoginTime { get; set; } public virtual ICollectionGuestbook Guestbooks { get; set; }} 2设计模型之间的多对多关联 将上述代码中的public virtual Member Member { get; set;}更改为 public virtual ICollectionMember Members { get; set; } 4.启用延迟装入特性 使用ORM框架基本上都会添加“延迟装入”的特性支持Entity Framework当然也不例外。当使用Entit Framework的ObjectContext与DbContext操作数据时默认都启用“延迟装入”。也就是当我们在应用程序里通过LINQ to Entity查询数据时如果遇到关联数据尚未装入的情况Entity Framework会自动帮我们再向数据库索取关联数据全自动地取得关联数据大幅降低编写访问关联数据的程序代码。 若要在Code First模型类别中启用“延迟装入”特性必须在属性声明时加上virtual关键词。 导航属性 它是实体类上的可选属性它允许从关联的一端导航到另一端。与其他属性不同导航属性并不携带数据。转载于:https://www.cnblogs.com/meetyy/p/3474092.html