EF学习之CodeFirst(一)--创建Model
一、创建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的更多相关文章
- EF学习之CodeFirst(二)--数据迁移
使用CodeFirst时,如果Model发生改变的话,例如我们给User类里面新加个Sex属性,运行时会出现如下错误: 这时我们需要使用数据迁移来将model的改变同步更新到数据库中. 1.启用数据迁 ...
- EF学习笔记(十二):EF高级应用场景
学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...
- EF学习笔记(九):异步处理和存储过程
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(八):更新关联数据 本篇原文:Async and Stored Procedures 为何要采用异步? ...
- EF学习笔记(七):读取关联数据
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文链接:Reading Related Data 本章主要讲述加载显示关联数据: 数据加载分为以下三种 Lazy l ...
- EF Core3.1 CodeFirst动态自动添加表和字段的描述信息
前言 我又来啦.. 本篇主要记录如何针对CodeFirst做自动添加描述的扩展 为什么要用这个呢.. 因为EF Core3.1 CodeFirst 对于自动添加描述这块 只有少部分的数据库支持.. 然 ...
- 个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 2
接上篇:个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 1 Step1 在主程序中设置连接数据库 从Model类库的 App.Config 把数据库字符串拷贝出来, ...
- EF学习笔记(十) 处理并发
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(九):异步处理和存储过程 本篇原文链接:Handling Concurrency Concurrency ...
- EF学习笔记(八):更新关联数据
学习笔记主目录链接:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇链接:EF学习笔记(七):读取关联数据 本篇原文链接:Updating Related Data 本篇主要考 ...
- PyQt学习随笔:Qt中Model/View中的怎么构造View匹配的Model
老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相 ...
随机推荐
- Git提交项目到GitHub
一.GitHub新建项目 1.进入Github首页,点击New repository新建一个项目 2.填写相应信息后点击create即可 Repository name: 仓库名称 Descripti ...
- 《LeetBook》leetcode题解(9):Palindrome Number[E]——回文数字
我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...
- java几个经典的算法题目----------二维矩阵算法
public class testClockwiseOutput { public static void main(String[] args) { //1.构建矩阵数据 int[][] arr = ...
- Win10上使用Linux Subsystem配置cuckoo sandbox
原文连接:https://www.trustwave.com/Resources/SpiderLabs-Blog/Cuckoo--Linux-Subsystem--Some-Love-for-Wind ...
- 陈新宇:CKafka在人脸识别PAAS中的应用
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 我叫陈新宇,在格灵深瞳负责数据流的研发,首先特别感谢如今老师,他们把Kafka一个优秀的消息中间件 ...
- mysql数据库引擎InnoDB和MyISAM
一.Mysql锁分类 表级锁:开销小,加锁块:不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发性也最高. 页面 ...
- Golang之并发资源竞争(互斥锁)
并发本身并不复杂,但是因为有了资源竞争的问题,就使得我们开发出好的并发程序变得复杂起来,因为会引起很多莫名其妙的问题. package main import ( "fmt" &q ...
- linux shell学习-1
今天在使用$()这个命令的时候,如下,一直纳闷为何输出不是 "/usr": 一直在不断换着法子来试,原来是$()会将每个执行的命令单独隔开来的,及时是嵌套的命令,也会在执行逻辑上单 ...
- 在用户控件(ASCX)创建用户控件(ASCX)
"我建了两个ascx,ascxA,ascxBascxA中放了一个PlaceHold,ascxB中放了一个textBoxascxA在page_load中动态创建了5个ascxB但是页面上什么都 ...
- nodejs使用sequelize操作mysql实例
sequelize是node操作mysql的一款npm包,包含很多特性:数据库模型映射.事务处理.模型属性校验.关联映射等,花了两天时间学习了下基本的一些操作,特别是关联映射部分的操作,包含1:1.1 ...