1. 安装Entity Framework

  使用NuGet安装Entity Framework程序包:工具->库程序包管理器->程序包管理器控制台,执行以下语句:

PM> Install-Package EntityFramework

2. Entity Framework数据库连接配置

  安装了Entity Framework之后,会自动添加App.config 文件。该文件中配置了Entity Framework的DefaultConnectionFactory,修改数据库连接字符串之后的连接具体如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=(local); Database=Portal; User ID=sa; Password=; MultipleActiveResultSets=True" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
</configuration>

  在进行上面的为Entity Framework设置DefaultConnectionFactory之后,使用Entity Framework连接数据库不需再在其他地方进行设置,Entity Framework也不需要指定数据库连接。

  Entity Framework连接数据库除了以上的方式,也可以通过配置常用的connectionStrings,修改App.config如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="PortalContext" connectionString="Data Source=(local); Database=Portal; User ID=sa; Password=; MultipleActiveResultSets=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

3. Entity Framework DbContext连接数据库

  新建类文件PortalContext.cs,具体代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Data.Entity; namespace Portal
{
public class PortalContext : DbContext
{
static PortalContext()
{
Database.SetInitializer<PortalContext>(null);
//Database.SetInitializer(new CreateDatabaseIfNotExists<PortalContext>());
//Database.SetInitializer(new DropCreateDatabaseAlways<PortalContext>());
//Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());
} public PortalContext()
: base("name=PortalContext")
{
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
}

  在PortalContext.cs中,使用了类的静态构造函数及构造函数。其中,在静态构造函数中设置数据库的初始化方式,在构造函数中指定App.config的connectionString。

3.1 Entity Framework数据库初始化方式

  Entity Framework通过Database.SetInitializer来指定需要的数据库初始化方式,Database.SetInitializer可指定的数据库共有3种:

  1>. CreateDatabaseIfNotExists

  CreateDatabaseIfNotExists是Database.SetInitializer指定数据库的默认方式,用于当数据库不存在时,自动创建数据库。由于该方式是默认方式,所以可以不需要任何代码进行指定,当然也可以使用代码来明确的指定。

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

  2>. DropCreateDatabaseWhenModelChanges

  DropCreateDatabaseWhenModelChanges用于当数据模型发生改变时,先删除原数据库,后创建新的数据库。

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());

  3>. DropCreateDatabaseAlways

  DropCreateDatabaseAlways用于每次均先删除原数据库再创建新的数据库,不管数据模型是否发生改变。

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

  但是,在很多时候,我们希望即使在Entity Framework Code First与数据库不匹配时,宁可Entity Framework Code First报出数据库连接错误,而不希望对数据库进行任何的删除创建操作。Entity Framework Code First提供关闭数据库初始化操作:

Database.SetInitializer<PortalContext>(null);

3.2 Entity Framework Code First连接数据库的一些设置

  在实际使用Entity Framework Code First来操作数据库时,通常会在继承DbContext的类中作一些Entity Framework Code First的数据库操作设置。

  1>. 禁用延迟加载(Lazy Loading)

  在存在引用关系的两个实体类中,一个类的实例可以通过关联关系获取与之对应的另外一个类的一个或多个实例。在这种获取的时候,Entity Framework Code First提供了默认的延迟加载功能。一个类的实例,在需要使用另外一个类对应的实例时,可以直接读取在类中定义的关联属性,Entity Framework将自动到数据库中去读取返回需要的记录。当然这是延迟加载的好处,同样延迟加载也存在一些不好的地方。在Entity Framework通过延迟加载去读取关联记录时,可能执行过多的SQL语句,与实际所预想的不一致,从而影响代码的执行效率。

  设置默认禁用延迟加载,在需要Entity Framework读取关联数据记录时采用显示加载。

public PortalContext()
: base("name=PortalContext")
{
// 禁用延迟加载
this.Configuration.LazyLoadingEnabled = false;
}

  2>. 禁用关系数据的级联删除

  在存在关联关系的数据记录间,当主表记录被删除时,自动删除从表中关联的记录。这个是关系数据库中大都存在的功能,包括MS SQL Server同样也提供了该功能。然而在实际的项目中,往往不想使用这种级联删除功能,在需要删除关联的记录时,也一样编写代码来进行删除。

  Entity Framework Code First设置默认禁用关联数据的级联删除功能:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// 禁用一对多级联删除
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
// 禁用多对多级联删除
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
}

  3>. 禁用默认表名复数形式

  Entity Framework Code First在根据类名来生成数据表时,生成的数据表表名会是类名的复数形式。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// 禁用默认表名复数形式
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

  最后附上本篇随笔中PortalContext.cs的完整代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions; namespace Portal
{
public class PortalContext : DbContext
{
static PortalContext()
{
Database.SetInitializer<PortalContext>(null);
} public PortalContext()
: base("name=PortalContext")
{
// 禁用延迟加载
this.Configuration.LazyLoadingEnabled = false;
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// 禁用默认表名复数形式
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
// 禁用一对多级联删除
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
// 禁用多对多级联删除
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
}
}
}

Entity Framework Code First数据库连接的更多相关文章

  1. Entity Framework Code First数据库连接 转载 https://www.cnblogs.com/libingql/p/3351275.html

    Entity Framework Code First数据库连接   1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器 ...

  2. Entity Framework Code First学习系列目录

    Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...

  3. Entity Framework Code First学习系列

    Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...

  4. 旧项目如何切换到Entity Framework Code First

    Entity Framework Code First固然是好东西,然而如果是已经存在的旧有项目,如何简单方便的使用切换呢? 这里介绍一个VS的插件Entity Framework Power Too ...

  5. Entity Framework Code First属性映射约定

    Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...

  6. Entity Framework Code First关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  7. Entity Framework Code First执行SQL语句、视图及存储过程

    1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...

  8. Entity Framework Code First使用DbContext查询

    DbContext.DbSet及DbQuery是Entity Framework Code First引入的3个新的类,其中DbContext用于保持数据库会话连接,实体变化跟踪及保存,DbSet用于 ...

  9. Entity Framework Code First添加修改及删除单独实体

    对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...

随机推荐

  1. WebGL入门教程(二)-webgl绘制三角形

    前面已经介绍过了webgl,WebGL入门教程(一)-初识webgl(http://www.cnblogs.com/bsman/p/6128447.html),也知道了如何绘制一个点,接下来就用web ...

  2. Z-STACK在CC2530上同时使用两个串口

    定义: 1.同时使用两个串口必须要一个为DMA,一个为ISR 2.我们这里使用串口1(DMA)来和别的设备进行通讯,使用 2(ISR)来和Z-TOOL进行通讯,方便调试 HAL_UART=TRUE Z ...

  3. html学习第二天—— 第九、十章——CSS的继承、层叠和特殊性+CSS格式化排版

    继承CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这个颜色设置不仅应用p标签, ...

  4. FragmentActivity_左右滑动的碎片

    test1.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  5. DFS序+线段树 hihoCoder 1381 Little Y's Tree(树的连通块的直径和)

    题目链接 #1381 : Little Y's Tree 时间限制:24000ms 单点时限:4000ms 内存限制:512MB 描述 小Y有一棵n个节点的树,每条边都有正的边权. 小J有q个询问,每 ...

  6. bzoj3680模拟退火

    看题意就是一道数学物理题,带权费马点   --这怎么是数学了,这也是物理的 所以要用物理方法,比如FFF 国际著名oi选手miaom曾说 模拟退火初温可以低,但是最好烧个几千次 国际著名物理课代表+1 ...

  7. Unity Android加密DLL笔记

    unity mono 地址:https://github.com/Unity-Technologies/mono 下载与unity版本对应的unity mono. brew安装:http://brew ...

  8. 【内核篇】Windows内核重要变量

    ====================================================== LIST_ENTRY PsLoadedModuleList; [定  义] wrk\wrk ...

  9. oracle表空间简单学习

    1.重命名表空间:alter tablespace 原表空间名 rename to 新表空间名ps:(1)system 和sysaux表空间不能重名(2)如果该表空间中任何一个数据出于脱机状态或者表空 ...

  10. IOS UIWebView 下拉刷新功能的简单实现

    1.运行效果图 2.swift 代码的实现 import UIKit class RefreshWebViewController: UIViewController,UIScrollViewDele ...