1、首先要知道EF是什么?

EF是针对ORM模型由微软发行的一款框架,相比于类似的框架还有NHibernate等框架。

2、是么是ORM模型?

这是一个对象关系映射模型。是由实体对象去映射数据库中的表而提出的一种概念。

对象关系映射(Object-relational mapping)

3、简单初使用

使用EF首先应该先导入包(EF)using System.Data.Entity;

  1. code first方式(代码优先)
  2. 首先我们应该确定使用哪种方式,如果已经有数据库了,那就创建现有的实体模型去映射数据库,如果没有数据库,也可以先建立数据模型然后去用模型去建立数据库。
  3. 设计器方式
  4. 我喜欢代码的方式。使用 EF 设计器:开发者使用 EF 设计器进行绘制以指定模型。 生成的模型以 XML 格式存储在具有 EDMX 扩展名的文件中。 应用程序域对象通常从概念模型中自动生成。

4、延迟加载(lazy loading)

  1. Lazy Loading means that the contents of these properties will be automatically loaded from the database when you try to access them.
  2. 延迟加载的意思就是:你想要获取的属性内容将会被自动的从数据库进行loading
  3. 理解:就是你要使用到数据的时候才会去数据库中查询,而不会是在Linqsql语句执行的时候。

5、了解核心(DbContext)

EF的核心就是DbContext类:

在项目开发中,我们的功能类要继承EF提供的DbContext类:

这个类的实例:代表一个和数据库的连接(会话)

  1. 可用于和数据库交互(增删查),
  2. 维护Entity的状态。

这个类是维护上下文的类,他类似于DataSet,是维护数据库中的表,当我,们查询或者修改的时候,会先修改那个DbContext所维护的表,然后调用SaveChange方法,去同步到数据库当中,如果没有发生改变或者只改变一部分,那就只更改那一部分属性。

值得注意的就是,调用SaveChange方法会默认的开启一个事务,去执行,当调用结束之后会关闭事务。

更要注意的是:一个DbContext只维护自己的表与实体的关系,不会去与另一个DbContext做比较。

6、实现日志(不太懂,主要是包的问题),以后估计可以用别的去集成。

  1. using Microsoft.Extensions.Logging;
  2. using Microsoft.Extensions.Logging.Debug;
  3. //引用的包很玄幻,很炫彩、很夺目。
  4. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  5. {
  6. ILoggerFactory loggerFactory = new LoggerFactory(
  7. new ILoggerProvider[]
  8. {
  9. //设置在debug模式下添加日志打印。
  10. new DebugLoggerProvider((x,l)=>true)
  11. }) ;
  12. optionsBuilder.UseLoggerFactory(loggerFactory).UseSqlServer(@"Data Source=localhost;Initial Catalog=Test_Pro;User ID=root;Password=root;Connect Timeout=30;Encrypt=False");
  13. base.OnConfiguring(optionsBuilder);
  14. }

7、了解注解形式

有时候我们的类想有一些特殊的功能,比如向一个列中设置主键,而不是使用默认的Id作为主键,这个时候我们就需要向想要设置主键的那一列添加注解,例如:

  1. class user
  2. {
  3. [key]
  4. string name{get;set;}
  5. }

具体的使用情况在相对应版本的EF的对应学习ER映射中有具体的列出。

8、Migration

这个就是在命令行中对数据库进行更改命令,类似于git的推送分支机制。

  1. get-help about_entityframework6
  2. //使用命令来查看EF是否安装成功
  1. //使用以下命令查看和推送 迁移
  2. Enable-Migrations//查看创建迁移文件
  3. Add-Migration//添加更新版本
  4. Update-Database//更新(推送)与数据库同步,可更新指定的添加的迁移版本。
  5. Get-Migrations//获取历史迁移