【Entity Framework】EF连接字符串和模型

【Entity Framework】EF连接字符串和模型

文章目录

  • 【Entity Framework】EF连接字符串和模型
    • 一、概述
    • 二、使用 Code First 按约定创建连接
    • 三、使用 Code First 和指定的数据库名称按约定创建连接
    • 四、将 Code First 与 app.config/web.config 文件中的连接字符串结合使用
    • 五、将 Database/Model First 与 app.config/web.config 文件中的连接字符串结合使用
    • 六、总结

在这里插入图片描述

一、概述

本文将介绍如何使用数据库连接及如何更改数据库连接。使用Code First和EF设计器创建的模型在本文中都会说明。

通常,实体框架应用程序使用派生自DbContext的类。此派生类将调用基础DbContext类上的构造函数之一来控制:

  • 上下文如何连接到数据库 - 即如何找到/使用连接字符串。
  • 上下文是使用 Code First 计算模型还是加载使用 EF 设计器创建的模型、

二、使用 Code First 按约定创建连接

如果尚未在应用程序中进行任何其他配置,那么,调用 DbContext 上的无参数构造函数将导致 DbContext 以 Code First 模式运行,并按约定创建数据库连接。 例如:

namespace Common.EF
{public class BloggingContext : DbContext{public BloggingContext(){}}
}

在此示例中,DbContext 使用派生上下文类的命名空间限定名称 (Demo.EF.BloggingContext) 作为数据库名称,并使用 SQL Express 或 LocalDB 为该数据库创建连接字符串。 如果两者均已安装,则使用 SQL Express。

三、使用 Code First 和指定的数据库名称按约定创建连接

如果尚未在应用程序中进行任何其他配置,通过要使用的数据库名称调用 DbContext 上的字符串构造函数将导致 DbContext 以 Code First 模式运行,并按约定与具有该名称的数据库建立连接。 例如:

public class BloggingContext : DbContext
{public BloggingContext(): base("BloggingDatabase"){}
}

DbContext 使用“BloggingDatabase”作为数据库名称,并使用 SQL Express(随 Visual Studio 2010 安装)或 LocalDB(随 Visual Studio 2012 安装)为该数据库创建连接字符串。 如果两者均已安装,则使用 SQL Express。

四、将 Code First 与 app.config/web.config 文件中的连接字符串结合使用

你可以选择将连接字符串放在 app.config 或 web.config 文件中。 例如:

<configuration><connectionStrings><add name="BloggingCompactDatabase"providerName="System.Data.SqlServerCe.4.0"connectionString="Data Source=Blogging.sdf"/></connectionStrings>
</configuration>

这是告诉 DbContext 使用 SQL Express 或 LocalDB 以外的数据库服务器的一种简单方法 - 上面的示例指定了 SQL Server Compact Edition 数据库。

如果连接字符串的名称与上下文的名称匹配(带或不带命名空间限定),那么当使用无参数构造函数时,DbContext 将找到它。 如果连接字符串名称与上下文名称不同,则可以通过将连接字符串名称传递给 DbContext 构造函数,告诉 DbContext 在 Code First 模式下使用此连接。 例如:

public class BloggingContext : DbContext
{public BloggingContext(): base("BloggingCompactDatabase"){}
}

或者,可以对传递给 DbContext 构造函数的字符串使用格式“name=”。 例如:

public class BloggingContext : DbContext
{public BloggingContext(): base("name=BloggingCompactDatabase"){}
}

此格式明确表示你希望在配置文件中找到连接字符串。 如果未找到具有给定名称的连接字符串,则会引发异常。

五、将 Database/Model First 与 app.config/web.config 文件中的连接字符串结合使用

使用 EF 设计器创建的模型与 Code First 的不同之处在于,模型已经存在并且不是在应用程序运行时通过代码生成的。 该模型通常作为项目中的 EDMX 文件存在。

设计器会将 EF 连接字符串添加到 app.config 或 web.config 文件中。 此连接字符串的特殊之处在于,它包含有关如何在 EDMX 文件中查找信息的信息。 例如:

<configuration>  <connectionStrings>  <add name="Northwind_Entities"  connectionString="metadata=res://*/Northwind.csdl|  res://*/Northwind.ssdl|  res://*/Northwind.msl;  provider=System.Data.SqlClient;  provider connection string=  &quot;Data Source=.\sqlexpress;  Initial Catalog=Northwind;  Integrated Security=True;  MultipleActiveResultSets=True&quot;"  providerName="System.Data.EntityClient"/>  </connectionStrings>  
</configuration>

EF 设计器还将生成代码,以通过将连接字符串名称传递给 DbContext 构造函数来告诉 DbContext 使用此连接。

public class NorthwindContext : DbContext
{public NorthwindContext(): base("name=Northwind_Entities"){}
}

DbContext 知道要加载现有模型(而不是使用 Code First 通过代码计算它),因为该连接字符串是一个 EF 连接字符串,其中包含要使用的模型的详细信息。

六、总结

DbContext 类包含其他构造函数和使用模式,可以实现一些更高级的方案。 其中一些功能包括:

  • 你可以使用 DbModelBuilder 类生成 Code First 模型,而无需实例化 DbContext 实例。 此操作将生成一个 DbModel 对象。 然后,当你准备好创建 DbContext 实例时,可以将此 DbModel 对象传递给 DbContext 构造函数之一。
  • 你可以将完整的连接字符串传递给 DbContext,而不只是传递数据库或连接字符串名称。 默认情况下,此连接字符串与 System.Data.SqlClient 提供程序一起使用;可以通过在 context.Database.DefaultConnectionFactory 上设置不同的 IConnectionFactory 实现来更改此行为。
  • 你可以通过将现有 DbConnection 对象传递给 DbContext 构造函数来使用它。 如果连接对象是 EntityConnection 的实例,则将使用连接中指定的模型,而不是使用 Code First 计算模型。 如果对象是某种其他类型的实例(例如,SqlConnection),上下文会将其用于 Code First 模式。
  • 你可以将现有 ObjectContext 传递给 DbContext 构造函数,以创建包装现有上下文的 DbContext。 这可用于使用 ObjectContext 但希望在应用程序的某些部分利用 DbContext 的现有应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/811277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请核对您的姓名、证件号码、有效期和年限是否选择正确,请勿使用挂失过的身份证

问题 请核对您的姓名、证件号码、有效期和年限是否选择正确&#xff0c;请勿使用挂失过的身份证 详细问题 笔者在专利业务办理系统进行新用户注册&#xff0c;注册时间为晚上大概22&#xff1a;00以后。注册时已核对姓名、证件号码、有效期和年限&#xff0c;已确保正确&…

LinkedHashMap部分底层源码解析

JDK版本为1.8.0_271&#xff0c;LinkedHashMap继承了HashMap&#xff0c;LinkedHashMap在HashMap的基础上维护了一个双向链表&#xff0c;实现了可以根据插入顺序/访问顺序&#xff08;accessOrderfalse/true&#xff09;访问Map集合。 关于HashMap的原理可以参考HashMap部分底…

RabbitMQ-死信队列常见用法

目录 一、什么是死信 二、什么是死信队列 ​编辑 三、第一种情景&#xff1a;消息被拒绝时 四、第二种场景&#xff1a;. 消费者发生异常&#xff0c;超过重试次数 。 其实spring框架调用的就是 basicNack 五、第三种场景&#xff1a; 消息的Expiration 过期时长或队列TTL…

基于特征的多模态生物信号信息检索与自相似矩阵:专注于自动分割

论文地址&#xff1a;Biosensors | Free Full-Text | Feature-Based Information Retrieval of Multimodal Biosignals with a Self-Similarity Matrix: Focus on Automatic Segmentation (mdpi.com) 论文源码&#xff1a;无 期刊&#xff1a;biosensors 这篇论文提出了一种基…

kafka(六)——存储策略

存储机制 kafka通过topic作为主题缓存数据&#xff0c;一个topic主题可以包括多个partition&#xff0c;每个partition是一个有序的队列&#xff0c;同一个topic的不同partiton可以分配在不同的broker&#xff08;kafka服务器&#xff09;。 关系图 partition分布图 名称为t…

利用细粒度检索增强和自我检查提升对话式问题解答能力

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;Boosting Conversational Question Answering with Fine-Grained Retrieval-Augmentation and Self-Check 论文地址&#xff1a;https://arxiv.org/abs/2403.18243 检索增强生成…

程序“猿”自动化脚本(一)

1.剪贴板管理器&#x1f4cb; 您是否曾经发现自己在处理多个文本片段时忘记了复制的内容&#xff1f;有没有想过有一个工具可以跟踪您一天内复制的所有内容&#xff1f; 该自动化脚本会监视您复制的所有内容&#xff0c;将每个复制的文本无缝存储在时尚的图形界面中&#xff0c…

阿里云4核16G服务器可以用来做什么?

阿里云4核16G服务器可以用来做什么&#xff1f;可用来搭建游戏服务器&#xff0c;阿里云4核16G服务器10M带宽30元1个月、90元3个月&#xff0c;优惠活动 aliyunfuwuqi.com/go/youhui 阿里云4核16G服务器可以用来做什么&#xff1f;除了搭建游戏服务器&#xff0c;还可以用来哪…

基于 GPIO 、Pinctl子系统、设备树的LED 驱动程序

理论部分&#xff1a; 编写思路&#xff1a; GPIO 的地位跟其他模块&#xff0c;比如 I2C 、 UART 的地方是一样的&#xff0c;要使用某个引脚&#xff0c;需要先把引脚配置为 GPIO 功能&#xff0c;这要使用 Pinctrl 子系统&#xff0c;只需要在设备 树里指定就可以。在…

力扣HOT100 - 41. 缺失的第一个正数

解题思路&#xff1a; 原地哈希 就相当于&#xff0c;让每个数字n都回到下标为n-1的家里。 而那些没有回到家里的就成了孤魂野鬼流浪在外&#xff0c;他们要么是根本就没有自己的家&#xff08;数字小于等于0或者大于nums.size()&#xff09;&#xff0c;要么是自己的家被别…

springCloud项目打包 ,maven package或install打包报错

解决思路一&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.7.RELEASE</version></plugin><plugin>&…

【应急响应事件】记一次矿机木马事件

事情起因&#xff0c;是因为实验室有一台服务器的占用率从开机启动就是100%&#xff0c;很怀疑就是中了某种矿机木马&#xff0c;拿去挖矿了&#xff0c;然后经过师兄的不懈努力&#xff0c;终于找到了木马文件&#xff0c;给他命名为virus_sample 然后我就拿着样本去逆了 木马…

OSCP靶场--Peppo

OSCP靶场–Peppo 考点(ident枚举服务用户名ssh登陆rbash绕过 docker提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.158.60 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-10 09:32 EDT Nmap scan report…

使用 Docker 部署 Linux-Command 命令搜索工具

1&#xff09;介绍 Linux-Command GitHub&#xff1a;https://github.com/jaywcjlove/linux-command Linux-Command 仓库搜集了 580 多个 Linux 命令&#xff0c;是一个非盈利性的仓库&#xff0c;生成了一个 Web 网站方便使用&#xff0c;目前网站没有任何广告&#xff0c;内…

T2.数据库原理

2.1 关系模型概述 1.域 域&#xff1a; 一组有相同数据类型的值得集合 2.笛卡尔积 笛卡尔积&#xff1a; 设任意的N个域D1,D2,…,Dn。 3、关系的定义和性质 &#xff08;1&#xff09;关系的数学定义&#xff1a; 在笛卡儿积中取出有实际意义的元组来构造关系。 关系也是…

C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

一 线性表的概念 线性结构是一种最简单且常用的数据结构。 线性结构的基本特点是节点之间满足线性关系。 本章讨论的动态数组、链表、栈、队列都属于线性结构。 他们的共同之处&#xff0c;是节点中有且只有一个开始节点和终端节点。按这种关系&#xff0c;可以把它们的所有…

leetcode每日一题第四十六天

递归解法 class Solution { public:int search(vector<int>& nums, int target) {return midsearch(nums,target,0,nums.size()-1);}int midsearch(vector<int>& nums, int target, int low,int high){if(low < high){int mid (lowhigh) / 2;if(nums[…

在Windows 10中打开PowerShell的几种方法,总有一种适合你

PowerShell是一种比命令提示符更强大的命令行shell和脚本语言。自Windows10发布以来,它已成为默认选择,并且有许多方法可以打开它。 PowerShell和命令提示符之间的区别是什么 PowerShell的使用更复杂,但它比命令提示符强大得多。这就是为什么它成为超级用户和it专业人员的…

从0开始创建单链表

前言 这次我来为大家讲解链表&#xff0c;首先我们来理解一下什么是单链表&#xff0c;我们可以将单链表想象成火车 每一节车厢装着货物和连接下一个车厢的链子&#xff0c;单链表也是如此&#xff0c;它是将一个又一个的数据封装到节点上&#xff0c;节点里不仅包含着数据&…

防错设计及原理

目录 1、防错的作用 2、防错的原理 2.1断根原理 2.2保险原理 2.3自动原理 2.4相符原理 2.5顺序原理 2.6隔离原理 2.7层别原理 2.8复制原理 2.9警告原理 2.10缓和原理 防错法&#xff08;Poka-Yoke&#xff09;&#xff0c;又称愚巧法、防呆法&#xff0c;是一种在作…