一、创建Model

创建Model类有两种方式:

1、直接创建model

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

   [Table("UserInfo")]
public class User
{
[Key]//主键
public int ID { get; set; } [MaxLength()]//最大长度
[Required]//不可为空
public string UserName { get; set; } [MaxLength()]
[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();
this.Property(t => t.Password).IsRequired().HasMaxLength(); //表名和列名映射
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,运行即可。

 

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

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

    使用CodeFirst时,如果Model发生改变的话,例如我们给User类里面新加个Sex属性,运行时会出现如下错误: 这时我们需要使用数据迁移来将model的改变同步更新到数据库中. 1.启用数据迁 ...

  2. EF学习笔记(十二):EF高级应用场景

    学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...

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

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(八):更新关联数据 本篇原文:Async and Stored Procedures 为何要采用异步? ...

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

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文链接:Reading Related Data 本章主要讲述加载显示关联数据: 数据加载分为以下三种 Lazy l ...

  5. EF Core3.1 CodeFirst动态自动添加表和字段的描述信息

    前言 我又来啦.. 本篇主要记录如何针对CodeFirst做自动添加描述的扩展 为什么要用这个呢.. 因为EF Core3.1 CodeFirst 对于自动添加描述这块 只有少部分的数据库支持.. 然 ...

  6. 个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 2

    接上篇:个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 1 Step1 在主程序中设置连接数据库 从Model类库的 App.Config 把数据库字符串拷贝出来, ...

  7. EF学习笔记(十) 处理并发

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(九):异步处理和存储过程 本篇原文链接:Handling Concurrency Concurrency ...

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

    学习笔记主目录链接:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇链接:EF学习笔记(七):读取关联数据 本篇原文链接:Updating Related Data 本篇主要考 ...

  9. PyQt学习随笔:Qt中Model/View中的怎么构造View匹配的Model

    老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相 ...

随机推荐

  1. reifiable type与raw type

    下面的逻辑需要明白如下两个概念: 4.7. Reifiable Types 4.8. Raw Types 举几个是Reifiable Types的例子,如下: class A{} class B< ...

  2. Kaggle之路,与强者为伍——记Santander交易预测

    Kaggle--Santander Customer Transaction Prediction 原题链接 题目 Description 预测一个乘客在未来会不会交易,不计交易次数,只要有交易即为1 ...

  3. I/O的整体介绍

    java的i/o操作类在包java.io下,大概可以分成如下四组: 基于字节操作的 I/O 接口:InputStream 和 OutputStream 基于字符操作的 I/O 接口:Writer 和 ...

  4. 深入js之基本语法

    周末正好有空就研究了下汤姆大叔的js系列博客,虽然只是学到点皮毛,依然获益匪浅.不得不说大牛的境界岂是吾等小辈可理解. 变量: js有隐含的全局概念,意味着不声明的所有变量都是全局对象的属性. fun ...

  5. C# SocketUdpServer

    public interface ISocketUdpServer { void Start(); void Stop(); int SendData(byte[] data, IPEndPoint ...

  6. SQL Serever学习14——存储过程和触发器

    存储过程 在数据库中很多查询都是大同小异,编写他们费时费力,将他们保存起来,以后执行就很方便了,把SQL语句“封装”起来. 存储过程的概念 存储过程是一组SQL语句集,经过编译存储,可以”一次编译,多 ...

  7. Linux NTP时间服务器

    NTP 时间服务器 ntp也是一种协议 ntp软件(支持ntp协议)  CentOS6自带 CentOS7需要安装 chrony软件(支持ntp协议)   CentOS7自带 安装ntp CentOS ...

  8. ASP.NET 简单的柱形图实现(附带示例)

    对于一些内部系统的项目,各种图表是在所难免的,因为图表可以更加清晰的表达出想看到的数据. 因为之前从来没有做过关于图表的东西,唯一能想到的就是“验证码”,所以应该是一个思路,用GDI去搞. 数据懒着去 ...

  9. 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2

    转自:https://blog.csdn.net/eson_15/article/details/51277324 今天开始做一个网上商城的项目,首先从搭建环境开始,一步步整合S2SH.这篇博文主要总 ...

  10. jvm 类文件结构学习

    本文以代码示例来学习 java 类文件的结构,其中对类文件结构的学习均来自周志明先生所著的 <深入理解 Java 虚拟机>一书,在此表示诚挚的感谢. 代码如下: package com.r ...