Entity Framework(1)——Connections and Models
原文:https://msdn.microsoft.com/en-us/data/jj592674
应该选择CodeFirst、ModelFirst还是databaseFirst网上已经很多资料了,这里不多说。
本文主要包含了EF怎样发现使用哪个数据库连接,以及怎样改变它。模型可以用CodeFirst和EF设计器创建。
通常,EF应用程序会有一个继承自DbContext的类,这个继承的类调用基类DbContext的一个构造函数,EF应用程序就是利用这个类(本文中也称为上下文类)来控制下面的内容:
1、Context怎样连接到一个数据库——例如Connection string 怎样被发现和使用
2、Context是用 CodeFirst创建一个模型还是用EF设计器创建一个模型
3、其他高级选项
使用CodeFirst的约定连接(按照EF约定创建连接)
如果在应用程序中没有做任何配置,那么调用DbContext的无参数构造函数时会使用CodeFirst模式按照约定来创建一个数据库及其连接。这个约定就是:数据库名称由 上下文类所在的命名空间+"."+上下文类名称。例如:
namespace Demo.EF
{
public class BloggingContext : DbContext
{
public BloggingContext()
// C# will call base class parameterless constructor by default
{
}
}
}
这个例子中,会在SQL Express或者Loacl Db中创建一个使用"Demo.EF.BloggingContext"作为数据库名的数据库,其中“Demo.EF”是上下文类所在的命名空间,“BloggingContext”是上下文类的名称。 这时,你去查看配置文件发现,没有增加任何与数据库连接相关的字符串信息。事实上,EF默认去本机查找SQLExpress或者LocalDb中名字为"Demo.EF.BloggingContext"的数据库。
VS2010中默认安装的SQL Express,VS2012中默认安装的是LocalDb,如果SQL Express和LocalDb都安装的话,那么EF会选择在SQL Express中创建数据库。
使用CodeFirst的约定连接并指定数据库名称
如果在应用程序中没有做任何配置,那么调用构造函数时,可以给它一个string类型的参数,这样将建立一个以该参数为名字的数据库。例如:
public class BloggingContext : DbContext
{
public BloggingContext(): base("BloggingDatabase")
{
}
}
例子中将在SQL Express或者LocalDb中创建名称为"BloggingDatabase"的数据库。同样,如果SQL Express和LocalDb都安装的话,那么EF会选择在SQL Express中创建数据库。
使用CodeFirst及配置文件中的connection string
你也可以选择先先在配置文件中设置好connection string。例如:
<configuration>
<connectionStrings>
<add name="BloggingCompactDatabase"
providerName="System.Data.SqlServerCe.4.0"
connectionString="Data Source=Blogging.sdf"/>
</connectionStrings>
</configuration>
然后,创建数据库上下文时使用下面的代码:
public class BloggingContext : DbContext
{
public BloggingContext(): base("BloggingCompactDatabase")
{
}
}
此时,创建数据库时,就会使用ConnectionString中指定的服务器和数据库名字。
你会发现这里创建数据库上下文的代码与上一节的非常相似,除了参数名字不一样。事实上,上面一段代码执行的时候,EF首先查找配置文件中有没有以“BloggingCompactDataBase”命名的连接字符串,如果有则使用该连接字符串,连接数据库(数据库未创建时会自动创建)。如果没有,那么会在SQLExpress或者LocalDb中名创建数名为“BloggingCompactDataBase”的数据库。
或者,也可以用“name=<connection string name>” 作为基类DbContext的构造函数的参数。例如:
public class BloggingContext : DbContext
{
public BloggingContext()
: base("name=BloggingCompactDatabase")
{
}
}
注意:这种形式明确说明需要在配置文件中找到名字为“BloggingCompactDataBase”的连接字符串,如果没有找到,则会抛出异常。
使用Database/Model First 及配置文件中的连接字符串
ModelFirst与CodeFirst不同,Models通过EF设计器创建,Models通常以EMDX文件的存在。
设计器会添加一个EF连接字符串到配置文件中。这个连接字符串比较特殊,它包括怎样从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=
"Data Source=.\sqlexpress;
Initial Catalog=Northwind;
Integrated Security=True;
MultipleActiveResultSets=True""
providerName="System.Data.EntityClient"/>
</connectionStrings>
</configuration>
EF设计器会生成下面的代码,其中通过传递连接字符串的名字来告诉DbContext使用这个连接字符串。
public class NorthwindContext : DbContext
{
public NorthwindContext()
: base("name=Northwind_Entities")
{
}
}
DbContext就会装入已经存在的model,而不是使用CodeFirst从code中计算,因为连接字符串是一个EF Connection string,其中包含了使用的model的细节。
DbContext的其他构造函数选择
DbContext类包含其他构造函数和使用模式,适用于一些更复杂的场景。具体可以参看原文,
Entity Framework(1)——Connections and Models的更多相关文章
- MVC & Entity Framework(2)- controller、Models单独DLL
继上一篇MVC & Entity Framework(1)- 开发环境之后,已经很久没更新了.接下来记录一下怎么把MVC中的controller单独拆为一个类库,然后在web项目中引用.另外, ...
- LINQ之路10:LINQ to SQL 和 Entity Framework(下)
在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术 ...
- LINQ之路 9:LINQ to SQL 和 Entity Framework(上)
在上一篇中,我们从理论和概念上详细的了解了LINQ的第二种架构“解释查询”.在这接下来的二个篇章中,我们将使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的 ...
- MVC & Entity Framework(1)- 开发环境
一直都有接触asp.net mvc,希望自己借此次机会把Blog搭起来的同时能够更深入地学习相关知识. ①新建 打开VS2012,新建ASP.Net MVC 4项目,接着选择“空”模板(因为不想用自带 ...
- Entity Framework(一) 映射
ADO.NET Entity Framework通过Modeel First和DataBase First,提供了几个把数据库表映射到对象上的曾.通过Database First,可以从一个数据库架构 ...
- Entity Framework(六):数据迁移
在前面的几篇文章中,简单的介绍了如何使用Entity Framework的Code First模式创建数据库,但是,在前面的几篇文章中,我们都是通过使用数据库初始化策略来做,也就是每次先删除数据库然后 ...
- Entity Framework(二)
1. ORM :Object Relation Mapping ,通俗说:用操作对象的方式来操作数据库. 2. 插入数据不再是执行Insert,而是类似于 Person p=new Person() ...
- Chapter1-data access reloaded:Entity Framework(上)
本章包括以下几个部分: 1.DataSet and classic ADO.NET approach2.Object model approach3.Object/relational mismatc ...
- Entity Framework(序)
ADO.NET Entity Framework 是一个对象-关系的映射结构,它提供了ADO.NET的一个抽象,可基于引用的数据库获取对象模型.可以通过Entity Framework 使用不同的变成 ...
随机推荐
- [置顶]
kubernetes资源类型--secret和Service Account
secret 概念 secret对象类型主要目的是保存和处理敏感信息/私密数据,比如密码,OAuth tokens,ssh keys等信息.将这些信息放在secret对象中比 直接放在pod或dock ...
- linux的dd命令详解
一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 块大小可以使用的计量表 参数注释: 1. if=文件名:输入文件名,缺省为标准输入stdin.即指定源文件.< ...
- IP头,TCP头,UDP头,MAC帧头定义
一.MAC帧头定义 /*数据帧定义,头14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER { char m_cDstMacAddress[6]; // ...
- log4j教程 2、安装
Log4j的API包使用Apache软件许可证,由开源倡议认证一个完全成熟的开源许可证下发布. 最新log4j的版本,包括完整的源代码,类文件和文档可以在这里找到 http://logging.apa ...
- 机器学习&深度学习资料(转载)
转自 飞鸟各投林 <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboo ...
- 2017.4.28 SSM框架搭建与配置
1.项目结构 2.配置文件 对配置文件进行总结: pom.xml web.xml -> 配置web相关 -> 读取application*.xml 5 -> 读取logback.xm ...
- 模拟服务器MockServer之Moco详细介绍
转载:http://blog.csdn.net/vite_s/article/details/54583243 前面一篇介绍了如何用mockito来测试我们的一些异步任务,例如网络请求时候的异步回调. ...
- native method与so中function的关联
在Android中,可以通过JNI的方式来调用和访问用C/C++实现的代码,这些代码以SharedLibrary的方式存在于so中.从Java Code到Native Code的一般使用过程为: 在J ...
- Centos 6安装 Jenkins
前言 持续集成的概念 持续集成,Continuous integration ,简称CI. 持续集成正是针对这一类问题的一种软件开发实践.它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多 ...
- MySQL高可用解决方案MMM
一.MMM简介: MMM即Multi-Master Replication Manager for MySQL:mysql多主复制管理器,基于perl实现,关于mysql主主复制配置的监控.故障转移和 ...