你必须掌握的Entity Framework 6.x与Core 2.0
汪鹏 |清华大学出版社
0.00 ¥99.00
收藏
浙江图书馆
  • ISBN
    9787302500179
  • 印刷时间
    2018-07-01
  • 库存
    正在获取...
产品特色
产品特色
编辑推荐
作者简介

汪  鹏,网名Jeffcky,湖南岳阳人,博客园推荐博主,微软MVP(微软有价值专家),拥有多年Entity Framework开发经验,乐于分享,对于Entity Framework的性能优化有深刻理解。 

内容简介

《你必须掌握的Entity Framework 6.x与Core 2.0 》针对Entity Framework 6.x和Entity Framework Core 2.0以通俗易懂的语言进行深入、全面的探讨,并结合实例来介绍如何灵活运用。

《你必须掌握的Entity Framework 6.x与Core 2.0 》共四篇,内容分为19章,第一篇(第1~3章)讲述Entity Framework 6.x基础,并深入讲解如何创建过滤索引、迁移的本质等;第二篇(第4~8章)讲述Entity Framework 6.x进阶,充分阐述Entity Framework 6.x背后隐藏的原理、性能优化、并发解析等;第三篇(第9、10章)讲述Entity Framework Core 2.0基础,并对Entity Framework Core每一版本所出现的新特性进行详细介绍和深入研究;第四篇(第11~19章)讲述Entity Framework Core 2.0进阶,内容包括Entity Framework Core变更追踪策略、创建上下文实例方式、性能优化,结合Entity Framework Core 2.0特性实现多租户模式,利用Entity Framework Core进行数据审计、并发解析等。

《你必须掌握的Entity Framework 6.x与Core 2.0 》适合ASP.NET开发人员阅读,也适合高等院校和培训学校相关专业的师生作为教学参考书。


精彩书评
精彩书摘

2.1.1 数据库连接

下面将从最简单的例子入手,然后由浅入深,本书所有例子将用Fluent API 演示,这样也

方便维护。我们利用控制台进行演示,因为不是创建默认的应用程序,里面会包含Entity

Framework程序集,所以在控制台中首先需要安装Entity Framework 6.0 程序集,如图2-1所示。

图2-1

接下来创建一个Blog 类,代码如下:

public class Blog

{

public int Id { get; set; }

public string Name { get; set; }

public string Url { get; set; }

public DateTime? CreatedTime { get; set; }

public double Double { get; set; }

public float Float { get; set; }

}

然后创建一个继承自EF上下文的类,此上下文是与数据库交互的一个中间桥梁,我们可

8

你必须掌握的Entity Framework 6.x 与Core 2.0

以称之为会话,并且为每一个模型公开一个DbSet,在上下文的派生类中定义DbSet 有如下三

种方式。

用DbSet 属性

public class EfDbContext : DbContext

{

public EfDbContext()

{

}

public DbSet<Blog> Blogs { get; set; }

}

用IDbSet 属性

public class EfDbContext : DbContext

{

public IDbSet<Blog> Blogs { get; set; }

}

只读设置属性

public class EfDbContext : DbContext

{

public DbSet<Blog> Blogs

{

get { return Set<Blog>(); }

}

}

最后在控制台的主函数中进行上下文实例化,并尝试添加Blog 的实例,代码如下:

using (var efDbContext = new EfDbContext())

{

efDbContext.Blogs.Add(new Blog()

{

Name ="Jeffcky",

Url = "http://www.cnblogs.com/CreateMyself"

});

efDbContext.SaveChanges();

}

此时将看到连接到数据库出错(见图2-2),是未配置数据库实例而导致的,这种情况的

出现是因为本地未安装LocalDB 实例,那么我们怎么知道到底有没有安装LocalDB 本地数据

库呢?

9

第2章 数据库表的创建和迁移

图2-2

运行命令SqlLocalDB.exe start v11.0,其中v11.0 对应数据库版本,VS2013 对应的本地数

据库版本为v11.0,其余可以查看控制台中App.config 或者Web.config 配置的版本,VS2017

对应的本地数据库如图2-3 所示(其余对应版本请自行查看所安装的VS版本)。

图2-3

若该命令不能正常使用,则说明本地数据库实例未安装;或者查看是否安装本地数据库实

例,方式为:从VS工具栏中依次选择“视图”→“服务器资源管理器”→“数据连接”,右

击添加连接,然后在呈现的界面中输入服务器名对应的数据库版本,比如(localdb)\v13.0,此

时再点击测试连接,出现如图2-4所示的界面,也说明未安装本地LocalDB数据库实例。

图2-4

在Entity Framework 中配置的数据库连接默认为LocalDB本地数据库连接,但是我们可以

手动通过EF 上下文派生类的构造函数来配置数据库连接,如图2-5 所示。其代码如下:

public EfDbContext():base("name=ConnectionString")

{

10

你必须掌握的Entity Framework 6.x 与Core 2.0

}

图2-5

然后在配置文件App.config 或者Web.config 中配置数据库连接字符串,代码如下:

<connectionStrings>

<add name="ConnectionString"

connectionString="Data Source=WANGPENG;Initial Catalog=EfDb;Integrated

Security=true"

providerName="System.Data.SqlClient"/>

</connectionStrings>

上面演示了用Entity Framework 创建数据库表最简单的例子,到此关于连接数据库做一个

总结:默认情况下,连接数据库生成的数据库名称为EF上下文所在的命名空间加上上下文名

称,若手动配置数据连接字符串,则生成的数据库名称为我们配置的数据库名称。接下来介绍

数据库初始化策略。

2.1.2 数据库初始化策略

上述演示示例为数据库不存在的情况下,如果数据库已存在,Entity Framework 是如何知

道的呢?对此,我们能想到的EF 团队早已明了,EF 团队将此作为可配置的,所以在Entity

Framework中初始化数据库有三种策略,需要在EF 上下文派生类的构造函数中定义。

如果数据库不存在,就创建:

Database.SetInitializer(new CreateDatabaseIfNotExists<EfDbContext>());

总是创建数据库,无论存在与否:

Database.SetInitializer(new DropCreateDatabaseAlways<EfDbContext>());

如果EF 检测到数据库模型发生了改变,将更新模型:

Database.SetInitializer(new

DropCreateDatabaseIfModelChanges<EfDbContext>());

就实际情况而言,我们会设置数据库初始化策略为上述第三种,若已存在数据库,则当模

型改变时,才重新创建数据库模型。

以上三种数据库初始化策略除了在DbContext 派生类构造函数里面指定外,我们同样可以

在配置文件中直接进行配置,例如:

Database.SetInitializer(new DropCreateDatabaseAlways<EfDbContext>());

在配置文件App.config 或者Web.config 中的AppSettings 节点下进行配置:

<appSettings>

11

第2章 数据库表的创建和迁移

<add key="DatabaseInitializerForType

EntityFramework_CreateDbContext.EfDbContext, EntityFramework_CreateDbContext"

value="System.Data.Entity.DropCreateDatabaseAlways,

EntityFramework" />

</appSettings>

上述key 值DatabaseInitializerForType 后面紧跟命名空间+DbConext 派生类,其余两种初

始化策略同理。如果想要禁用数据库初始化策略,那么在DbContext 派生类和配置文件中该如

何配置呢?代码如下:

public class EfDbContext : DbContext

{

public EfDbContext() : base("name=ConnectionString")

{

Database.SetInitializer<EfDbContext>(null);

}

}

或者

<appSettings>

<add key="DatabaseInitializerForType

EntityFramework_CreateDbContext.EfDbContext, EntityFramework_CreateDbContext"

value="Disabled" />

</appSettings>


目录
相关推荐
读者免费借回家
加入书架成功