zoukankan      html  css  js  c++  java
  • EF学习之CodeFirst(一)--创建Model

    一、创建Model

    创建Model类有两种方式:

    1、直接创建model

      所有约束条件都以特性的方式写在model的属性上面,映射到数据库的table表名标识在class上,例如:

       [Table("UserInfo")]
        public class User
        {
            [Key]//主键            
            public int ID { get; set; }
    
            [MaxLength(50)]//最大长度
            [Required]//不可为空
            public string UserName { get; set; }
    
            [MaxLength(50)]
            [Required]
            [DataType(DataType.Password)]//设置与字段关联的附加类型
            public string Password { get; set; }       
        }
    View Code

      以上代码要引用命名空间:

    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;

    2、Model和约束条件分开

      将属性和约束分开,有利于保持类的完整性,而且修改起来更加方便,在使用的过程中更推荐这种写法。

      创建的Model还是放在Models文件夹下,还是以前的写法,例如:

       public class User
        {
            public int ID { get; set; }
            public string UserName { get; set; }
            public string Password { get; set; }
        }
    View Code

      将相关约束放在另外一个文件夹Maps里面,例如:

    public class UserMap : EntityTypeConfiguration<User>
        {
            public UserMap()
            {
                //主键
                this.HasKey(t => t.ID);
    
                //设置属性约束
                this.Property(t => t.UserName).IsRequired().HasMaxLength(50);
                this.Property(t => t.Password).IsRequired().HasMaxLength(50);
    
                //表名和列名映射
                this.ToTable("UserInfo");
                this.Property(t => t.ID).HasColumnName("ID");
                this.Property(t => t.UserName).HasColumnName("UserName");
                this.Property(t => t.Password).HasColumnName("Password");
            }
        }
    View Code

      以上要继承EntityTypeConfiguration<T>,在构造函数里面写入相关代码,并且引用命名空间:

    using System.Data.Entity.ModelConfiguration;

     二、创建数据库上下文

      创建数据库上下文需继承DbContext类,构造函数里面指定数据库连接的字符串,表名用DbSet来实例化,例如:

      针对第一种创建的Model:

     public class DBContext : DbContext
        {
            public DBContext()
                : base("name=myConn")
            {
            }
    
            public DbSet<User> UserInfo { get; set; }
        }
    View Code

      针对第二种创建的Model,需要将Map和Class映射:

    public class DBContext : DbContext
        {
            public DBContext()
                : base("name=myConn")
            {
            }
    
            public DbSet<User> UserInfo { get; set; }
    
            /// <summary>
            /// 映射约束
            /// </summary>
            /// <param name="modelBuilder"></param>
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Configurations.Add(new UserMap());
            }
    }
    View Code

    三、配置数据库连接字符串

    在webConfig文件里配置数据库连接字符串:

    <connectionStrings>
        <add name="myConn" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=EFTest;Integrated Security=SSPI;" />
      </connectionStrings>
    View Code

    四、配置Global

    在Application_Start方法里添加如下代码:

    //如果数据库不存在就新建数据库
                Database.SetInitializer(new CreateDatabaseIfNotExists<DBContext>());
    View Code

    五、添加Controller,运行即可。

     

  • 相关阅读:
    几个简单的定律
    poj 2443 Set Operation 位运算
    博弈论 wythff 博弈
    BZOJ 2120 树状数组套平衡树
    HDU 1392 凸包
    ZOJ 1648 线段相交
    HDU 1756 点在多边形内
    SPOJ 1811 LCS 后缀自动机
    BZOJ 1901 树状数组+函数式线段树
    HDU 1086 线段相交(不规范相交模板)
  • 原文地址:https://www.cnblogs.com/rumeng/p/4560238.html
Copyright © 2011-2022 走看看