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)
        {
        }
    }
}

 

posted on 2015-06-11 16:14  JessicaYe  阅读(611)  评论(0编辑  收藏  举报