前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >EF 数据库连接约定(Connection String Conventions in Code First)

EF 数据库连接约定(Connection String Conventions in Code First)

作者头像
郑小超.
发布于 2018-01-26 08:26:10
发布于 2018-01-26 08:26:10
1.5K00
代码可运行
举报
文章被收录于专栏:GreenLeavesGreenLeaves
运行总次数:0
代码可运行

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

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

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

(3)、额外的高级选项

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

一、DbContext无参构造函数

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace Demo.EF 
{ 
    public class EFStudyContext : DbContext 
    { 
        public EFStudyContext()// C# will call base class parameterless constructor by default 
        { 
        } 
    } 
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中的数据库上下文就会运行在基于当前数据库连接字符串上.代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class BloggingContext : DbContext 
{ 
    public BloggingContext(): base("BloggingDatabase") 
    {} 
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Data Source=(localdb)\mssqllocaldb;Initial Catalog=BloggingDatabase;Integrated Security=True;MultipleActiveResultSets=True

2、使用app.config/web.config配置文件中的连接字符串,表示你在应用程序中已经进行了配置,这一点要区分上面的方法.

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<configuration> 
  <connectionStrings> 
    <add name="BolggingContext" 
         providerName="System.Data.SqlServerCe.4.0" 
         connectionString="Data Source=Blogging.sdf"/> 
  </connectionStrings> 
</configuration>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class BloggingContext : DbContext 
{ 
    public BloggingContext()
    { 
    } 
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using (var context=new BloggingContext())
{
     string connStr = context.Database.Connection.ConnectionString;
     Console.WriteLine(connStr);
}   

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public class BloggingContext:DbContext
    {
        public DbSet<User> Users { get; set; }

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

        }
    }
    static void Main(string[] args)
    {
         using (var context=new BloggingContext())
         {
             string connStr = context.Database.Connection.ConnectionString;
             Console.WriteLine(connStr);
         }
         Console.ReadKey();
    }

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public class BloggingContext:DbContext
    {
        public DbSet<User> Users { get; set; }

        public BloggingContext():base("name=BloggingStr")
        {

        }
    }
    static void Main(string[] args)
    {
        using (var context=new BloggingContext())
        {
            string connStr = context.Database.Connection.ConnectionString;
            Console.WriteLine(connStr);
        }
        Console.ReadKey();
    }

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public class BloggingContext:DbContext
    {
        public DbSet<User> Users { get; set; }

        public BloggingContext():base("server=.;database=EFStudy;uid=sa;pwd=123456;")
        {

        }
    }
    static void Main(string[] args)
    {
         using (var context=new BloggingContext())
         {
             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.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EF Core 基础知识
EF Core 默认会与 ASP.NET Core的日志提供程序一起工作,只需要使用AddDbContext或AddDbContextPool添加服务即可。
拓荒者IT
2019/09/23
8070
ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB
您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中。你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity Framework将预设值使用的LocalDB。 在本节中,我们将显式地在Web.config文件中,添加应用程序的连接字符串(connection string)。 SQL Server Express LocalDB LocalDB的是一个SQL Server Express轻量级版本的数据库引擎。 它在
葡萄城控件
2018/01/10
3.4K0
ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB
Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库
    在 .Net Core 2.2中 Microsoft.AspNetCore.App 默认内置了EntityFramework Core 包,所以在使用过程中,我们无需再从 NuGet 仓库单独应用 EFCore 包;本文并不打算深入的介绍 EFCore 的各种使用方式、原理解析,本文重点在于解决让初学者在10分钟内快速使用上 EFCore 的问题。
梁规晓
2019/04/11
1.8K0
Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库
Entity Framework应用:使用Code First模式管理数据库创建和填充种子数据
在数据库上下文类中,如果我们只继承了无参数的DbContext,并且在配置文件中创建了和数据库上下文类同名的连接字符串,那么EF会使用该连接字符串自动计算出数据库的位置和数据库名。比如,我们的数据库上下文定义如下:
CherishTheYouth
2019/09/11
1.3K0
Entity Framework应用:使用Code First模式管理数据库创建和填充种子数据
osharp多租户数据建库隔离方案
吴晓阳
2025/02/28
350
Entity Framework CodeFirst尝试
Code First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入的功能。使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(其实就是领域模型的实现过程),然后自动生成数据库。这样设计的好处在于我们可以针对概念模型进行所有数据操作而不必关系数据的存储关系,使我们可以更加自然的采用面向对象的方式进行面向数据的应用程序开发。
aehyok
2018/09/11
6840
Entity Framework CodeFirst尝试
ef和mysql使用(一)
这里为什么要写ef和mysql的使用,ef默认连接的sqlserver ,使用起来可能会比较顺手,ef和mysql使用的时候会出现各种问题,所以这里就搞mysql,要有一颗勇于出错的心。
yaphetsfang
2020/07/30
1K0
浅入 ABP 系列(6):数据库配置
本系列的第五篇:https://www.cnblogs.com/whuanle/p/13061059.html
痴者工良
2021/04/26
9170
从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratch 前三部分弄完,我们已经可以对内存数据进行CRUD的基本操作,并且可以在asp.net core 2中集成Nlog了。 下面继续: Entity Framework Core 2.0 Entity Framework 是ORM(Object-Relational-Mapping)。ORM是一种让你可以使用面向
solenovex
2018/03/01
2.3K0
从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
数据库连接对象的使用
连接字符串 1、连接字符串的写法 在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证) sqlConnection.ConnectionString = "Server=(Local); Database=EduBaseDemo; Integrated Security=sspi"; 2、SqlConnection对象 头部添加调用,包含访问SQL Server所需的各类对象 using System.Data.SqlClient; 返回数据库连接对象,参数
Woodson
2018/07/18
1.4K0
entity framework数据库映射(ORM)
Sql Server安装:EntityFramework Mysql安装:MySql.Data.Entity
sofu456
2022/05/06
9760
entity framework数据库映射(ORM)
Entity Framework——读写分离
1 实现 CustomDbContext扩展了DbContext,其构造函数带有形式参nameOrConnectionString,可以在使用CustomDbContext时指定数据库连接字符串。 DbContextFactory包含两个属性MasterDbContext和SlaveDbContext,MasterDbContext为主库上下文,SlaveDbContext为从库上下文。DbContextFactory还包含了一个方法:UpdateSlaves用于实现对SlaveDbContext的更新,因
甜橙很酸
2018/03/08
1.1K0
ASP.NET Core 使用 SQLite 教程,EF SQLite教程
https://blog.csdn.net/qq_31930499/article/details/80420246
痴者工良
2019/08/08
4.8K0
在 EF 5 中跟踪SQL和缓存数据
在EF4和EF5中需要跟踪执行SQL和缓存数据,微软官方有一个名为EFProviderWrappers的扩展示例非常值得学习,EFProviderWrappers包含EFTracingProvider和EFCachingProvider,前者用于跟踪EF中增删改查的SQL语句,后者用于将EF查询的结果自动进行缓存,缓存策略过期时间可由开发者自己指定,目前这两个扩展只支持EF4和EF5,因为EF6中微软已提供拦截器,开发者可自行开发拦截扩展,此示例演示如何通过ADO.NET提供程序接口扩展EF框架。 提供程序
逸鹏
2018/04/09
1.1K0
在 EF 5 中跟踪SQL和缓存数据
EF Core 实现读写分离的最佳方案
公司之前使用Ado.net和Dapper进行数据访问层的操作, 进行读写分离也比较简单, 只要使用对应的数据库连接字符串即可. 而最近要迁移到新系统中,新系统使用.net core和EF Core进行数据访问. 所以趁着假期拿出一两天时间研究了一下如何EF Core进行读写分离.
梁规晓
2019/10/10
2.3K0
一步步学习EF Core(1.DBFirst)
GuZhenYin
2018/01/04
1.5K0
一步步学习EF Core(1.DBFirst)
.NET Core 获取数据库上下文实例的方法和配置连接字符串
ASP.NET Core 的数据库注入是最为简单方便的了,在 ConfigureServices 配置即可。
痴者工良
2021/04/26
2.2K0
CSharpEntityFramework与CodeFirst实践
当我们进行开发的时候,常常会用到数据库来对数据进行持久化的操作,有的时候,我们并不想要在进行代码开发的过程中,还去关注数据库的构建,表的构建等等。于是,就有了Code First模式。何为Code First模式呢?它思想就是先定义模型中的类,再通过这些类生成数据库。这种开发模式适合于全新的项目,它使得我们可以以代码为核心进行设计而不是先构造数据库。这样一来,使得我们更加关注代码的开发。在c#中,我们使用EntityFramework来实现Code First场景。
w4ngzhen
2023/10/16
3220
CSharpEntityFramework与CodeFirst实践
C# 数据操作系列 - 8. EF Core的增删改查
到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置。
程序员小高
2020/05/21
3.3K0
在.NET Core类库中使用EF Core迁移数据库到SQL Server
前言 如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题。 起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合理,一些关于数据库的迁移,比如新增表,字段,修改字段类型等等,不应该和最上层的Web项目所关联,数据的迁移文件放到这里也感觉有点多余,有点乱乱的感觉,所以才想着单独出来由专门的项目进行管理会比较好,也比较清晰! 注意目标框架选择的是.NET Core 2.0而不是.NET Standard 2.0。 0、前期准
企鹅号小编
2018/01/25
1.8K0
相关推荐
EF Core 基础知识
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验