Entity Framework学习笔记——配置EF
初次使用Entity Framework(以下简称EF),为了避免很快忘记,决定开日志记录学习过程和遇到的问题。
因为项目比较小,只会用到EF的一些基本功能,因此先在此处制定一个学习目标:
1. 配置EF(指定EF用哪个数据库,相信在大部分开发过程中都不会使用官方Demo中的LocalDb)
2. 根据代码生成表(主要是一些特殊情况,比如希望自己设置string类型属性的长度,不想统一都是nvarchar(max))
3. 生成视图(部分类其实希望生成成为视图,这样可以让数据库表设计更加符合范式,同时简化查询,不知道能不能实现)
4. 生成数据库脚本和变更脚本(对于Code First的方式来说,这一步也是相当重要的,否则就没有Code First的意义了)
怎样获取EF,怎样添加EF到项目里去这里就不说了,使用NuGet是一个相对简单的方式,不清楚可以看官方的说明。添加完EF之后就需要对EF进行配置了,通常这时候配置文件里已经自动添加上默认的EF配置节点了,如果新建的是命令行程序,那配置文件应该就是这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
可以看出配置文件的configSection中首先添加了一个名为entityFramework的section,下面接着多了一大篇 entityFramework的配置。defaultConnectionFactory项只会在没有添加connectionString配置项的情 况下使用,默认值是LocalDbConnectionFactory,也就是使用LocalDb。我们可以将type改 为"System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework",这样就可以使用SQL Server数据库。parameter是SqlConnectionFactory的构造函数的参数,我们可以将它的值改为我们要指定的连接字符串,这 里可以使用标准的SQL Server连接字符串。需要注意的一点是,在这里Initial Catalog或Database项会被忽略。这里遇到了点小问题,不能指定数据库名,难道只能使用默认生成的EFTest.DataContext作为 数据库名么?通过对象浏览器找到System.Data.Entity.Infrastructure.SqlConnectionFactory类型, 查看带参数的构造函数说明如下:
public SqlConnectionFactory(string baseConnectionString)
System.Data.Entity.Infrastructure.SqlConnectionFactory 的成员 摘要:
使用给定的 BaseConnectionString 属性创建新的连接工厂。 参数:
baseConnectionString: 要用于“初始目录”之外的数据库的选项的连接字符串。
在调用 CreateConnection 时,将基于数据库名称在此字符串前预置“初始目录”。 public System.Data.Common.DbConnection CreateConnection(string nameOrConnectionString)
System.Data.Entity.Infrastructure.SqlConnectionFactory 的成员 摘要:
基于给定的数据库名称或连接字符串为 SQL Server 创建连接。如果给定的字符串包含“=”字符, 则将其视为一个完整的连接字符串,否则仅将其视为数据库名称。 参数:
nameOrConnectionString: 数据库名称或连接字符串。 返回值:
已初始化的 DbConnection。
可以得知数据库名称是通过调用CreateConnection方法时获得的。如果这时完成了官网上的最简单的Code First的Demo,代码里一定有一个父类为DbContext的BlogContext或者xxContext的类型。查看DbContext定义, 有一个构造函数参数名称为string nameOrConnectionString,得解。只需要将代码改为下面这样就可以了:
public class BlogContext : DbContext
{
public BlogContext()
: base("你的数据库名称")
{
}
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
当然,也可以直接设置connectionStrings,就可以直接将defaultConnectionFactory配置项删除了,也不需要代码里指定数据库名称。
配置文件最终类似这个样子:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="BlogContext"
providerName="System.Data.SqlClient"
connectionString="Server=xxx;Database=xxx;Integrated Security=False;User ID=sa;Password=xxx;"/>
</connectionStrings>
</configuration>
最后补充说明一点,配置的数据库连接字符串配置项的name应该与你的Context类型的名称一致,例如本例中就应该配置为BlogContext,以避免其它额外的配置,至于能不能让两者不同,笔者暂时没有研究,有兴趣的朋友可以研究研究。
Entity Framework学习笔记——配置EF的更多相关文章
- Entity Framework学习笔记
原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总 之前的小项目做完了,到了总结经验和 ...
- ADO.NET Entity Framework学习笔记(3)ObjectContext
ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转] 说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...
- Entity Framework 学习笔记(2)
上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...
- Entity Framework学习笔记——错误汇总
之前的小项目做完了,到了总结经验和更新学习笔记的时间了.开始正题之前先啰嗦一下,对之前的学习目标进行一个调整:“根据代码生成表”与“生成数据库脚本和变更脚本”合并为“Code First模式日常使用篇 ...
- Entity Framework学习笔记——记一个错误解决方式及思路
继续之前设定的学习目标前,先来一篇小小的外篇.按照第一篇里的配置方式配置好的工程前两天还能正常工作,昨天却突然无法通过Add-Migration命令进行数据库的升级.错误信息如下: System.Da ...
- Entity Framework学习笔记(三)----CRUD(2)
请注明转载地址:http://www.cnblogs.com/arhat 昨天晚上老魏配的机器终于到了,可是拿回来之后什么都组装好了,唯独差一个非常重要的组件"电源线",老魏那个汗 ...
- Entity Framework学习笔记(二)----CRUD(1)
请注明转载地址:http://www.cnblogs.com/arhat 这篇文章老魏和大家分享一下Entity Framework的CRUD操作,在这之前呢,老魏先说一下老魏对EF的一个整体的认识, ...
- Entity Framework学习笔记(一)
请注明转载地址:http://www.cnblogs.com/arhat 哈哈!老魏回来了,4月份的内容开始更新了,由于3月份时间都在做项目,没有时间写了,那么4月份老魏会尽可能的多写点东西的.那么4 ...
- Entity Framework 学习笔记
1.自定义数据库链接字符串上下文 public class PetDbContext : DbContext { public PetDbContext() : base("name=Dem ...
随机推荐
- ✡ leetcode 170. Two Sum III - Data structure design 设计two sum模式 --------- java
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
- 获取应用程序信息.h
//// 获取应用程序信息.h// IOS笔记// 一般会用来判断是否有新版本.是否需要强制更新 iOS的版本号,一个叫做Version,一个叫做Build,这两个值都可以在Xcode 中选中ta ...
- LINUX测试环境部署nginx(五)
安装配置nginx 安装编译环境:yum -y install pcre-devel openssl openssl-devel 拷贝nginx压缩文件到目标目录后,解压tar -zxvf nginx ...
- Kindle DXG和Win10 64bits无法连接的问题
直入主题:换根数据线. 不要觉得答案简单,我就是不负责任的在调侃. 在得出这条答案之前,我的思路是,既然插上线以后,kindle的充电指示灯会亮,那就应该不是线的问题. 所以实际的过程是我安装了驱动之 ...
- etcd第三集
简单说下golang的etcd接口例子.etcd api有v2(http+json)和v3(grpc)两个版本,目前大家都用v2,所以... v2: https://github.com/coreos ...
- 数据库服务器CPU持续百分之百、部分Session一直处于执行状态---等待事件为:asynch descriptor resize(Oracle Bug )
问题描述: 项目反馈数据库服务器的CPU持续100%的情况,跟踪发现很多活动会话的等待事件是“asynch descriptor resize”,并且这些会话一直处于Active状态,而这些会话执行的 ...
- MySql中常用的hint
对于经常使用Oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法.同样,在MySQL里,也有类似的hint功能.下面介绍一些常用的. 强制索引 FORCE ...
- Oracle 备份与还原
oracle 备份与还原 一.备份数据库(exp) 1.完全备份 exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=y demo:用户名.密码 ...
- Java基础--serialVersionUID
Java基础--serialVersionUID serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.有两种生成方式: 一个是默认的1L,比 ...
- 在CentOS中将/var等已有目录挂载到新添加的硬盘
1.查看当前硬盘使用状况: [root@gluster_node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on / ...