MVC3+CodeFirst学习笔记

● MVC3 中文版: 下载地址

● MVC3 文件夹说明:

 文件夹  作用
 /Controllers  Controllers处理来自浏览器的输入,决定要做什么,并且把结果返回给用户
 /Views  Views包含UI模板
 /Models  Models包含数据及对数据的操作
 /Content  包含图片、CSS及其它静态内容
 /Script  包含JavaScript文件
 /Add_Data  包含数据库文件(注:通常用来保存网站配置的SQL Express数据库、Access数据库等随网站一起发布的数据库文件。使用Sql Server、MySql之类数据库的可以无视它)

● MVC3 创建步骤:

Step1. 创建的是一个“空的”Asp.net Mvc3的项目,并且让视图引擎选定为Razor。

* 这个时候直接点击运行会直接访问http://localhost:31207/,无法找到资源,因为里面没内容,创建项目时选择Internet Application模板. 就会生成个默认的可以执行的页面。

Step2. EFCodeFirst相关问题: 

1)工具下载

  CTP5(实体框架特性): CodeFirst 通过实体代码自动创建数据库  下载地址 

  CodeFirst辅助工具: EF Power Tool   根据数据库生成MODEL类,生成EF Generated View提高EF性能 下载地址

2)安装CTP5后添加CodeFirst的引用:.net组件名称为EntityFramework 和 System.Data.Entity

3)编写实体类 (置于Models文件夹)

  public class Department

  {

        public int DepartmentID { get; set; }

        [MinLength(2)]

        [MaxLength(20)]//在数据库中生成nvarchar(20)的字段

        public string DepartName { get; set; }

        public virtual ICollection<Employee> Employees { get; set; } //使用virtual字段延迟加载

  }  

  public class Employee

  {  

        public int EmployeeID { get; set; }

        public int Age { get; set; }

        public int DepartmentID { get; set; }

        public virtual Department Department { get; set; } //使用virtual字段延迟加载

  }

CTP5版支持的注释的完整列表如下:

  • KeyAttribute
  • StringLengthAttribute
  • MaxLengthAttribute
  • ConcurrencyCheckAttribute
  • RequiredAttribute
  • TimestampAttribute
  • ComplexTypeAttribute
  • ColumnAttribute  置于一个属性上,指定其字段名,序数和数据类型
  • TableAttribute  置于一个类上,指定其数据表名和定义
  • InversePropertyAttribute   置于一个导航属性上,指定代表关系另一端的属性
  • ForeignKeyAttribute   置于一个导航属性上,指定代表关系外键的属性
  • DatabaseGeneratedAttribute   置于一个属性上,指定数据库该如何为该属性生成值(Identity, Computed 或者 None)
  • NotMappedAttribute    置于一个属性或类上,将其排除在数据库外

其他特性:
  [Display(Name = "用户名")]

常用的验证属性:
 [Required]
 [DataType(DataType.EmailAddress)] 
 [DataType(DataType.Password)]
 [Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]

4)编写Context (放置于Models文件夹)

public class RenContext : DbContext

    {

        public DbSet<Employee> Employees { get; set; }

        public DbSet<Department> Departments { get; set; }

 

    //不写这个  默认的数据库名称就是RenContext

        public RenContext() : base("name=dbStr") { }

 

        //这个方法可以没有,重写的这个方法里,我们可以移除一些契约,还可以配置数据库映射关系

        protected override void OnModelCreating(ModelBuilder modelBuilder)

        {

            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约

            modelBuilder.Conventions.Remove<IncludeMetadataConvention>();//防止黑幕交易 要不然每次都要访问 EdmMetadata这个表

            /*

                可以删除的公约有:

                Namespace:System.Data.Entity.ModelConfiguration.Conventions.Edm

                • AssociationInverseDiscoveryConvention

                寻找导航上互相引用的类的属性,并将它们配置为逆属性的相同的关系。

                • ComplexTypeDiscoveryConvention

                寻找有没有主键的类型,并将它们配置为复杂类型。

                • DeclaredPropertyOrderingConvention

                确保每个实体的主要关键属性优先于其他属性。

                • ForeignKeyAssociationMultiplicityConvention

                配置是必需的还是可选的关系基于为空性外键属性,如果包含在类定义中。

                • IdKeyDiscoveryConvention

                查找名为 Id <TypeName> Id 的属性,并将他们配置作为主键。

                • NavigationPropertyNameForeignKeyDiscoveryConvention

                使用外键关系,使用 <NavigationProperty> <PrimaryKeyProperty> 模式作为属性的外观。

                • OneToManyCascadeDeleteConvention

                交换机上层叠删除,所需的关系。

                • OneToOneConstraintIntroductionConvention

                将配置为一个: 一个关系的外键的主键。

                • PluralizingEntitySetNameConvention

                配置为多元化的类型名称的实体数据模型中的实体集的名称。

                • PrimaryKeyNameForeignKeyDiscoveryConvention

                使用外键关系,使用 <PrimaryKeyProperty> 模式作为属性的外观。

                • PropertyMaxLengthConvention

                配置所有的字符串和字节 [] 属性,默认情况下具有最大长度。

                • StoreGeneratedIdentityKeyConvention

                配置默认情况下将标识所有整数的主键。

                • TypeNameForeignKeyDiscoveryConvention

                使用外键关系,使用 <PrincipalTypeName> <PrimaryKeyProperty> 模式作为属性的外观。

             */

        }

    }

 

5)数据库设置

  ● 新增添数据库

  [没有连接串的情况]  将会在本地的 .\SQLExpress 中创建一个默认的数据库。

  [显式指定连接串]  在 web.config 中增加一个连接串的配置来显式指定,连接串的名字需要匹配 DbContext 类的名字,例:

  <connectionStrings>
     <add name="RenContext" connectionString="Data Source=ACER-PC\HHSQLSERVER;Initial Catalog=REN;Integrated Security=True"
       providerName="System.Data.SqlClient" />
  </connectionStrings>

  ● 修改数据库

  

8)常用网址

用EF Code First和ASP.Net MVC3进行类级别模型验证

一步一步学习ASP.NET MVC3 &EF Code First CTP 5&DI

Repository模式

Code First中的约定

CTP5版: 流畅 API 例子

实体框架代码优先CTP5发布

EF特性CTP5版: 代码优先示范

跟我学MVC系列(Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX)

Entity Framework 4.1 Code First学习之路(一)

MVC3教程之实体模型和EF CodeFirst

CTP5自动重建数据库

Entity Framework学习高级篇1—改善EF代码的方法

Entity Framework 4 代码优先开发:http://www.c_ongci.com/item/codefirst (去掉下划线)

 

 

 

posted @ 2011-07-13 11:59  潇客的技术博客  阅读(7259)  评论(1编辑  收藏  举报