ASP.NET MVC中Model相关技术

  在Model里的程序,由于“只能”跟数据与商业逻辑有关,因此Model专注于如何有效地提供数据访问机制、交易环境、数据格式、商业逻辑验证等工作。

一、使用Code First创建数据模型

  数据库开发模式有数据库优先开发模式(Database First Development)、模型优先开发模式(Model First Development)和程序代码优先开发模式(Code First Development)这三种。ASP.NET MVC的Model数据库开发模式为程序代码优先开发模式,使用Code First创建数据模型。在创建数据库模型时,需要了解的一些转换规则:

  1.[Key]声明主键

    一般情况下,Entity Framework声明主键采用设置主键名称为Id,型别为int,Code First会自动识别主键。若主键名称不是Id,则需要人为编程设计解决。如主键名为MyId,则需要在相应的MyId属性上添加Key属性,如下:

[Key]

public int MyId { get ; set ; }

    注:需要使用using System.ComponentModel.DataAnnotations;命名空间。

  2.[Required]必填字段

    若希望设置string型别字段属性为Not Null,则需要用到Required属性,如下:

[Required]

public string Name { get ; set ; }

    注:需要使用using System.ComponentModel.DataAnnotations;命名空间。

  3.[MaxLength()]声明字段长度

    声明数据长度时,需要使用MaxLength属性,如下:

[MaxLength(5)]

public string Name { get ; set ; }

    注:需要使用using System.ComponentModel.DataAnnotations;命名空间。

  4.+?允许Null字段

    像用DateTime这样的属性定义的字段,默认是Not Null的。如果要声明为Null的,则要在属性后面加?,如下:

public DateTime? CreatedOn { get ; set ; }

    注:需要使用using System.ComponentModel.DataAnnotations;命名空间。

  5.DatabaseGenerated声明字段默认值

    在该属性上加上一个DatabaseGenerated属性,并传入DatabaseGeneratedOption.Computed参数到DatabaseGenerated,如下:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

public DateTime CreateOn { get ; set ; }

    注:需要使用using System.ComponentModel.DataAnnotations.Schema;命名空间。

  6.设计模型之间的关联性(一对多关联&多对多关联)

    一对多关联设计——举例说明,如下代码为两个数据模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcGuestBook.Models
{
    public class Guestbook
    {
        public int Id { get; set; }
        public string Message { get; set; }
        public DateTime CreatedOn { get; set; }
    }
    public class Member
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
}

    在数据上下文类里定义两个数据模型之间的关系:增加——public DbSet<Member> Member { get; set; }

using System.Data.Entity;

namespace MvcGuestBook.Models
{
    public class MvcGuestBookContext : DbContext
    {
        public MvcGuestBookContext() : base("name=MvcGuestBookContext")
        {
        }

        public DbSet<Guestbook> Guestbooks { get; set; }
        public DbSet<Member> Member { get; set; }
    }
}

    在Guestbook和Member这两个数据模型内分别加上它们各自的“导览属性”:

    Guestbook中增加——public Member Member { get; set; };

    Member中增加——public ICollection<Guestbook> Guestbooks { get; set; }。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcGuestBook.Models
{
    public class Guestbook
    {
        public int Id { get; set; }
        public string Message { get; set; }
        public DateTime CreatedOn { get; set; }
        public Member Member { get; set; }
    }
    public class Member
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public ICollection<Guestbook> Guestbooks { get; set; }
    }
}

    多对多关联设计——与一对多关联设计相类似,不同之处是Guestbook中增加的“导览属性”为——public ICollection<Member> Members { get; set; }。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcGuestBook.Models
{
    public class Guestbook
    {
        public int Id { get; set; }
        public string Message { get; set; }
        public DateTime CreatedOn { get; set; }
        public ICollection<Member> Members { get; set; }
    }
    public class Member
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public ICollection<Guestbook> Guestbooks { get; set; }
    }
}

二、使用Code First数据库迁移

  开启程序包管理器控制台窗口,步骤如图所示:菜单栏-->工具-->库程序包管理器-->程序包管理器控制台

  在程序包管理器控制台窗口输入Enable-Migrations -ContextTypeName MvcGuestBook.Models.MvcGuestBookContext实现数据库迁移,其中MvcGuestBookContext是模型设计时创建的。

  Enter运行完之后,就会在指定项目中创建一个Migrations目录,该目录下有两个文档:*_InitialCreate.cs和Configuration.cs。

  默认情况下,数据库不会发生自动迁移,若要实现自动迁移,可以将Configuration.cs内的Configuration()构造函数中的AutomaticMigrationsEnabled设置为true,如下所示:

namespace MvcGuestBook.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    internal sealed class Configuration : DbMigrationsConfiguration<MvcGuestBook.Models.MvcGuestBookContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
        }
        protected override void Seed(MvcGuestBook.Models.MvcGuestBookContext context)
        {
        }
    }
}
时间: 2024-12-28 18:43:03

ASP.NET MVC中Model相关技术的相关文章

ASP.NET MVC中Model元数据解析学习

闲来继续学习蒋金楠大师的ASP.NET MVC框架揭秘一书,当前主要阅读的内容是Model元数据的解析,即使是阅读完的现在,仍然有不少细节不是特别明白.好在这部分内容主要是关于Razor引擎的呈现的,通过注解的方式对Model进行自定的修饰,最终使得页面在渲染时(即从cshtml文件转化为html时),相关的数据能够按照指定的形式转化并显示.由于接下来的项目中不再打算使用Razor引擎,该引擎虽然很不错,但也有一些问题,例如存在HTML5代码与HtmlHelper的混写,使得UI层很难与业务代码

ASP.NET MVC中对Model进行分步验证的解决方法

原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个Model的信息,但是又分页面填写信息的,当时我加上ModelState.IsValid这句验证代码的时候,根本没法通过验证,因为在注册的前面三步,注册用户的Model信息都没填写完整,而ModelState.IsValid是对一个实体的所有属性进行判断验证的.当时很纠结,因为刚接触Asp.net

在 Asp.NET MVC 中使用 SignalR 实现推送功能 [转]

在 Asp.NET MVC 中使用 SignalR 实现推送功能 罗朝辉 ( http://blog.csdn.net/kesalin ) CC许可,转载请注明出处 一,简介 Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请求或使用轮询技术来获取消息. 可访问其官方网站:https://github.com/SignalR/ 获取更多资讯. 二,实现机制

ASP.NET MVC传递Model到视图的多种方式总结

ASP.NET MVC传递Model到视图的多种方式总结 有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData ViewModel Tuple 场景: 在视图页面,下拉框选择课程触发事件,分别显示老师课程表.学生上课表,如图: 相关的Model: 1 public class Course 2 { 3 public int Id { get; set; } 4 public string Name { get; set; } 5

关于asp.net MVC 中的TryUpdateModel方法

有比较才会有收货,有需求才会发现更多. 在传统的WebFormk开发工作中,我们常常会存在如下的代码块 //保存 protected void btnSubmit_Click(object sender, EventArgs e) { try { BLL.MoneyBll cun = new BLL.MoneyBll(); Model.Money m1 = new Model.Money(); m1.Commany = int.Parse(this.Commany.Text); m1.Count

在asp.net mvc中使用PartialView返回部分HTML段

问题链接: MVC怎样实现异步调用输出HTML页面 该问题是个常见的 case, 故写篇文章用于提示新人. 在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewResultBase 同一时候它还有个兄弟PartialViewResult 相信聪明的你已经知道了它俩的差别了,没错 一个用于返回总体,还有一个返回局部(部分). 如果我有这样一个需求,输入username,然后返回相关信息.之前的做法可能会是用json格式来返回用户的相关信息,然后到页面去渲染相关 的

ASP.NET MVC3中Model验证

原文:ASP.NET MVC3中Model验证 概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证. 本节我们就学习如何使用 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证. 这些特性用于定义常见的验证模式,例如范围检查和必填字段.而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使

关于 ASP.NET MVC 中的视图生成

在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通常,在 Controller 中,我们定义多个 Action ,每个 Action 的返回类型一般是 ActionResult,在 Action 处理的最后,我们返回对于视图的调用. public ActionResult Index() { return this.View(); } 默认情况下,

在ASP.NET MVC中对手机号码的验证

在ASP.NET MVC中,可以使用RegularExpression特性来验证手机号码. public class Customer { [Required(ErrorMessage = "必填")] [Display(Name = "手机号")] [RegularExpression(@"^1[3458][0-9]{9}$", ErrorMessage = "手机号格式不正确")] public string PhoneN