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; }
    }

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

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; }
    }

  将相关约束放在另外一个文件夹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");
        }
    }

  以上要继承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; }
    }

  针对第二种创建的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());
        }
}

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

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

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

四、配置Global

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

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

五、添加Controller,运行即可。

 

时间: 2024-07-30 21:06:46

EF学习之CodeFirst(一)--创建Model的相关文章

EF学习总结——CodeFirst

EF面向数据的一软件应用程序的技术,从名称来看,Entity Framework,实体框架,为什么说是面向数据呢?这里涉及到了EF的操作原理.它可以直接通过建立的实体来映射到数据库中的每张表,同时通过数据库中的表来映射实体中的各个属性.那么这里就涉及到三个对象,数据库,实体和code,所以,EF在构建映射关系时,也包含三种不同的构建方式,DataBaseFirst,ModelFirst和CodeFirst. 关于前两种的构建方式,均属于图形化界面方式,根据提示一步一步往下走,很容易完成,第三种c

EF学习之CodeFirst(二)--数据迁移

使用CodeFirst时,如果Model发生改变的话,例如我们给User类里面新加个Sex属性,运行时会出现如下错误: 这时我们需要使用数据迁移来将model的改变同步更新到数据库中. 1.启用数据迁移功能 打开程序包管理控制台:选好要启动数据迁移的默认项目,输入enable-migrations,运行,出现下述情况即迁移成功. 启用数据迁移成功后项目里面会多出一个文件夹,文件夹里包括两个文件): 打开Configuration文件,将构造函数里面的AutomaticMigrationsEnab

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(4) - EF Core CodeFirst 数据库创建

概述 在 基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入 一文中,我们介绍如何快速以CodeFirst快速搭建数据库,这一章,我们来完善一下创建数据库中可以添加的验证与约束. 微软爸爸官方文档:Entity Framework Core 数据库操作 (1) 数据库迁移  add-migration [任一名称,须唯一] (2) 更新数据库  update-database (3) 删除数据库迁

EF学习笔记(七):读取关联数据

总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文链接:Reading Related Data 本章主要讲述加载显示关联数据: 数据加载分为以下三种 Lazy loading 这种加载方式在于需要用到这个导航属性数据的时候,才会去数据库取数据,如下图,循环中,每一次都去数据库取一次数据: Eager loading 这种加载方式则是先定义好哪个导航属性数据需要一起加载(通过是.Inclue),然后在加载主数据的时候,一并把导航数据全部加载,如下图: Expl

EF学习笔记(九):异步处理和存储过程

总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(八):更新关联数据 本篇原文:Async and Stored Procedures 为何要采用异步? 一个Web服务器肯定有可用线程的限制,那么在一些访问量特别大的情况下,线程肯定会消耗完:这个时候服务器肯定处理不了请求,必须等线程里处理结束才可以处理请求: 在非异步的时候,很多线程都处于等待状态,并不是一直在工作,而是在等类似于I/O等处理结束: 采用异步的时候,当一个处理在等待I/O处理结束的时

Rhythmk 学习 Hibernate 01 - maven 创建Hibernate 项目之 增删改查入门

1.环境: Maven :3.1.1 开发工具:Spring Tool Suite 数据库 : Mysql  5.6 2.项目文件结构 文件代码: 2.1 .pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap

EF学习笔记(八):更新关联数据

学习笔记主目录链接:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇链接:EF学习笔记(七):读取关联数据 本篇原文链接:Updating Related Data 本篇主要考虑对于有关联的数据进行新增.删除.更新操作:比如Course .Instructor: 对于Course来说,新增时候必须定义属于哪个Department,所以在新增.更新操作的时候,必须要用户选择Department: MVC5在选择基础控制器及视图框架的时候,如果选择EF的操作框架,则会自动带一

Unity插件之NGUI学习(4)—— 创建UI2DSprite动画

创建一个新的Scene,并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Create->Unity 2D Sprite 查看Inspector窗口 接着是在Unity中制作Sprite: 在Project窗口创建Textures文件夹,并从外部拖入一些图片素材,然后选中需要转成Sprite的图片,然后在Inspector窗口进行转变Sprite的操作,如图. 选择Sprite(2D

【总结】Kylin创建Model

根据如下四类表数据,创建Model, 事实表为酒店信息表,其余三张维度表是城市信息,行政区信息,商圈信息.酒店信息表中有外键分别与地域相关三张表关联 DICT_CITYINFO DICT_HOTELINFO DICT_REGIONINFO DICT_ZONEINFO 第一步 Model Info Model的基本信息 第二步 Data Model 选择事实表,依次关联Looup Table.以hotelinfo为基础,我们采用inner joint 关联城市表: 关联行政区表 关联商圈表 第三步