轻松理解ORM与EF以及EF CodeFirst模式的详细搭建过程
前言:
如果你很想将ef的原理轻松的搞明白,那么你一定要好好看看本博客,因为它可以轻松的帮到你理解其原理!
1、ORM
ORM(Object Relation Mapping)对象关系映射,ORM模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
以上就是网上各种抽象的大师给予的定义,看着忒难理解,接下来看下我的分析:
ORM就是对象关系映射,O就是对象 ,R就是关系,M就是映射
(1)R(relation)
我们之前操作数据库中的表都是通过insert update delete select 这四个sql语句进行操作的对吧,这是关系型数据库的增删改查!
(2)O(Object)
这个是对象,我们在修改一个对象,删除一个对象,或者创建一个对象的基本语句如下,我们以Person类举例子:
添加一个对象:var p=new Person();
更新一个对象的基本属性:p.age=18;
删除一个对象:Persons.Remove§;
(3)M (Mapping)
这个就是映射,ORM的思想就是用操作对象的语句来操作数据库,不用自己写sql,如下图
说到这里大家就明白了吧,让我们操作数据库,向操作对象一样简单,接下来看EF!
2、EF
ORM是一种思想,那么EF就是用这种思想搭建出来的框架!这是微软首推的框架,还有其它的,大家可以自己去查,这里主要简单的介绍EF,EF仍然是对ADO.Net的封装!
EF有如下三种模式,这三种模式就是在建立数据库,生成模型类的过程不一样,但是最后的结果都是一样,图中简单的说明了各种方式的利弊,现在业界都是用codeFirst,接下来将详细的介绍codeFirst的实现过程
3、EF CodeFirst的搭建过程
(1)新建一个控制台应用程序,然后建立一个ado.net实体数据模型
选择空codefirst模型
(2)新建两个类,一个是学生类,一个是班级类,其种一个学生对应一个班级类,而一个班级有多个学生
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class StudentInfo
{
[Key]
public int Id { get; set; }
[StringLength(32)] //长度为32
[Required] //不可空
public string StuName { get; set; }
[Required]
public DateTime SubTime { get; set; }
//一个学生只有一个班级
public virtual ClassInfo classinfo { get; set; }
}
public class ClassInfo
{
[Key] //Id就是主键
public int Id { get; set; }
[StringLength(32)] //长度为32
[Required] //不可空
public string ClassName { get; set; }
[Required] //不可空
public DateTime CreateTime { get; set; }
//一个班级有多个学生
public virtual ICollection<StudentInfo> StudentInfo{ get; set; }
}
(3)引用System.Data.Entity与EntityFramework
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190227162534618.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2plcnJ5MTExMTI=,size_16,color_FFFFFF,t_70)
EntityFramework是从Nuget包里下载的!点击引用,点击管理Nuget程序包,然后搜索EntityFramework,出现插件,直接下载就好了!
至于这里有人会问Nuget程序包个啥玩意,这里小编就给你简单的解释下,Nuget程序包就是我们VS下载插件的一个源,这里默认的就是 nuget.org!这里你完全可以理解成一个软件库,里边有咱们需要下载的插件
(4)在config进行简单的配置
<connectionStrings>
<add name="connStr" connectionString="Data Source=LG6688\SQLEXPRESS;user id=sa; Password=123456; Database=EFCodeFirst" providerName="System.Data.sqlClient" />
</connectionStrings>
(5)建立数据操作类
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace EF__codeFirstr
{
public class CodeFirstDbContext:DbContext
{
public CodeFirstDbContext() : base("name=connStr")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>(); //移除复数的约定
}
public DbSet<ClassInfo> classInfo { get; set; } //表示可以对实体进行操作
public DbSet<StudentInfo> studentInfo { get; set; }
}
}
(6)Main函数编写
class Program
{
static void Main(string[] args)
{
CodeFirstDbContext db = new CodeFirstDbContext();
db.Database.CreateIfNotExists(); //检查没有EFCodeFirst数据库,就建立一个EFCodeFirst数据库
ClassInfo classInfo = new ClassInfo();
classInfo.ClassName = "207班";
classInfo.CreateTime = DateTime.Now;
db.classInfo.Add(classInfo);
db.SaveChanges();
}
}
(7)运行
此时在我们的sql Server中成功的新建立一个数据库,以及下面的表
最后我们发现,根本不需要对数据库进行任何的操作就完成了,完全是代码编写!以后我们开发项目就用codefirst就行了
如果本博客对你又理解,请记得点赞!