一个典型的EF应用大多数情况下是一个DbContext的派生类(derived class)来控制,通常可以使用该派生类调用DbContext的构造函数,来控制以下的东西:

(1)、上下文如何连接到数据库(给定连接字符串)

(2)、上下文是通过Code First语法计算模型还是使用EF 设计器

(3)、额外的高级选项

下面是DbContext构造器的常用的用途:

一、DbContext无参构造函数

如果当前EF应用中没有做任何的配置.且在你自定义的数据库上下文类中没有调用DbContext带参的构造函数,那么当前应用对应的数据库上下文类,将会调用DbContext的默认无参的构造函数(EF默认规定的数据库连接),代码如下:

namespaceDemo.EF

{public classEFStudyContext : DbContext

{public EFStudyContext()//C# will call base class parameterless constructor by default

{

}

}

}

EF默认的联结字符串如下:

Data Source=(localdb)\mssqllocaldb;Initial Catalog=EFStudyConsole(项目名称).EFStudyDbContext(上下文名称);Integrated Security=True;MultipleActiveResultSets=True

EF会用上下文的完全限定名(命名空间+上下文类)作为数据库名,创建一个连接字符串,该连接字符串会连接本地的SQL Express或者LocalDb,并在SQL Express或者LocalD创建对应的数据库,如果两者都安装了,则会选择连接SQL Express。

注:VS2010默认安装SQL Express,VS2012默认安装LocalDb,在安装过程中,EF NuGet包会检查哪个数据库服务(前面介绍的)可用,当EF创建默认连接的时候,当EF创建默认链接的时候,NuGet包将通过设置默认的Code First数据库服务器来更新配置文件,该数据库服务器在通过约定创建连接时首先使用该服务器。.如果SQL Express 正在运行,它会被使用,如果它不可用,LocalDb会替代它,但是这个过程不会对配置文件做任何的更改,如果它已经包含默认连接工厂的设置.

二、DbContext带string参数的构造函数

1、如果没有在数据库上下文进行其他额外的配置,然后调用DbContext中的带参的构造函数,传入你想要使用的数据库连接字符串,然后Code First中的数据库上下文就会运行在基于当前数据库连接字符串上.代码如下:

public classBloggingContext : DbContext

{public BloggingContext(): base("BloggingDatabase")

{}

}

Data Source=(localdb)\mssqllocaldb;Initial Catalog=BloggingDatabase;Integrated Security=True;MultipleActiveResultSets=True

(1)、有Ado.Net使用经历的都知道,一般情况下,数据库连接字符串一般定义在app.config/web.config配置文件中,例如:

这在EF中相当于告诉数据库上下文去使用当前连接字符串对应的数据库服务,而不是使用SQL Express or LocalDb,数据库上下文代码如下:

public classBloggingContext : DbContext

{publicBloggingContext()

{

}

}

如果连接字符串的name属性值和上下文类名一样(either with or without namespace qualification),那么数据库上下文在执行无参构造函数的时候,会使用配置文件的连接字符串去连接数据库.

using (var context=newBloggingContext())

{string connStr =context.Database.Connection.ConnectionString;

Console.WriteLine(connStr);

}

(2)、如果连接字符串的name属性值和上下文类名不一样,但是还是希望上下文使用配置文件的数据库连接进行数据库连接,这时就需要在上下文构造函数中调用DbContext的带string参数的构造函数,并传入连接字符串的name属性值,代码如下:

public classBloggingContext:DbContext

{public DbSet Users { get; set; }public BloggingContext():base("BloggingStr")

{

}

}static void Main(string[] args)

{using (var context=newBloggingContext())

{string connStr =context.Database.Connection.ConnectionString;

Console.WriteLine(connStr);

}

Console.ReadKey();

}

另外一种方式是传递给DbContext构造函数配置文件中的connectionString节点的name属性来指定上下文通过配置文件中connectionString来连接字符串,代码如下:

public classBloggingContext:DbContext

{public DbSet Users { get; set; }public BloggingContext():base("name=BloggingStr")

{

}

}static void Main(string[] args)

{using (var context=newBloggingContext())

{string connStr =context.Database.Connection.ConnectionString;

Console.WriteLine(connStr);

}

Console.ReadKey();

}

上面这种方式是明确EF进行数据库连接的时候去配置文件找连接字符串。

(3)、连接字符串的终极解决方案,直接给连接字符串,什么都不要配,代码如下:

public classBloggingContext:DbContext

{public DbSet Users { get; set; }public BloggingContext():base("server=.;database=EFStudy;uid=sa;pwd=123456;")

{

}

}static void Main(string[] args)

{using (var context=newBloggingContext())

{string connStr =context.Database.Connection.ConnectionString;

Console.WriteLine(connStr);

}

Console.ReadKey();

}

注:默认情况下,当前的连接字符串使用的是System.Data.SqlClilent作为provider,这里可以被改变通过做一个IConnectionFactory的不同的实现来替换context.Database.DefaultConnectionFactory默认的实现.

三、还有其他两种方法,不常用

1、You can use an existing DbConnection object by passing it to a DbContext constructor. If the connection object is an instance of EntityConnection, then the model specified in the connection will be used rather than calculating a model using Code First. If the object is an instance of some other type—for example, SqlConnection—then the context will use it for Code First mode.

使用一个DbConnection 实例,或者是SqlConnection实例或者EntityConnection实例,传递给DbContext的构造函数均可指定对应的数据库连接规则.

2、You can pass an existing ObjectContext to a DbContext constructor to create a DbContext wrapping the existing context. This can be used for existing applications that use ObjectContext but which want to take advantage of DbContext in some parts of the application.

ef mysql 约定_EF 数据库连接约定(Connection String Conventions in Code First)相关推荐

  1. ef mysql 连接数_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

    原标题:EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽 DbContextPool 是 ASP.NET Core 2.1 引入的新特性,可以节省创建 DbContext ...

  2. ef mysql 事务_EF中使用事务 - 李超明的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.EF中的默认的事务 默认情况下,当我们执行一个SaveChanges()方法时就会新建了一个事务,然后将context中的CUD操作都在这个事务中进行.Context中有多个SaveChanges ...

  3. ef mysql 插件_EF Core 插件 —— ToSql

    原标题:EF Core 插件 -- ToSql 背景 在使用Entity Framework Core进行开发时,若不使用Logger很难查看到一个查询的SQL语句,同时也有些开发者因为不了解EF C ...

  4. ef mysql跟踪sql语句_EF Core 日志跟踪sql语句

    EF Core 日志跟踪sql语句 1.新增自定义ILoggerProvider实现类 public class EFLoggerProvider : ILoggerProvider { public ...

  5. ASP .NET Core使用connection string连接MySQL/MariaDB,并设置UTF-8编码

    具体的使用文章参考我的这篇博客:ASP .NET Core Web 系列教程四:使用数据库进行交互(MySQL/MariaDB 版) 我这里介绍一下设置UTF-8的编码的Connection Stri ...

  6. ef mysql code first_关于ef+codefirst+mysql(入门)

    ef+mssql详细是许多.net程序员的标配.作为一个程序员当然不能只会mssql这一个数据库,今天简单聊聊ef+mysql.推荐新人阅读. 1]首先创建一个mvc项目,如图: 创建完毕之后再nug ...

  7. C#连接mySql异常MySql.Data.MySqlClient.MySqlException:“SSL Connection error.”

    解决此异常需要保证一下正常 MySqlConnection conn;//表示到MySQL数据库的打开连接. 这个类不能被继承. MySqlCommand comm;//表示要对MySQL数据库执行的 ...

  8. Java测试各种数据库连接(用Connection类)

    源代码: package cn.finedo.fdcollect_service.util;import java.sql.Connection;import org.apache.logging.l ...

  9. Servlet+MySQL使用DBCP数据库连接池实现用户登录

    首先准备数据库数据和登录页面 创建user数据表并且插入几条数据 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (`id` int(11) NOT ...

最新文章

  1. struts2之配置文件struts.xml详解
  2. 大规模图训练调优指南
  3. 线段 LibreOJ - 10007(贪心)
  4. ngRx 官方示例分析 - 4.pages
  5. h5页面禁止复制_H5移动端页面禁止复制技巧
  6. scjp java程序员_Sun认证Java程序员SCJP考题常见陷阱
  7. 使用python命令行参数sys.argv 做bat脚本
  8. Python-Spyder中文包正式发布!
  9. 3806. 最小化字符串-AcWing题库
  10. 晶体管电路设计.铃木雅臣
  11. VMware中进行文件移动/复制权限不够的问题
  12. 文献阅读【RNA-seq数据归一化】
  13. 搭建iis自己可以别人_自己也可以搭建一台好用实惠的软导一体机!
  14. [Python] python + selenium 抓取 京东商品数据(商品名称,售价,店铺,分类,订单信息,好评率,评论等)
  15. 百家号平台中的问答功能,自媒体人可以这样玩!
  16. 黑苹果驱动神器Hackintool 3.4.4中文版
  17. C++11中,获取随机数的新方法default_random_engine
  18. VUE页面背景设置为视频
  19. 使用C# 创建windows 服务
  20. oracle 学习积累(3)

热门文章

  1. 高翔视觉SLAM十四讲课本代码运行
  2. requests模块的异常处理
  3. OPA 20 - deliberately generate an error
  4. linux 循环一段ip区间,Shell脚本实现判断IP地址是否在一个ip段内代码分享
  5. 浅谈现代计算机产业革命
  6. ZbxTable 2.0 重磅发布!6大主要优化功能!
  7. 耿丹CS16-2班第三次作业汇总
  8. “云钉一体”战略解读:阿里打通了数字化的“罗马引水桥”
  9. Deepin 2014.2正式版发布 - 自由·独特·前卫
  10. python计算bmi的编程_Python学习-计算BMI的小程序