EntityFrameworkSection

本文介绍了如何在项目中配置EntityFramework以连接指定的数据库,包括更改默认的LocalDb配置、通过代码或配置文件指定数据库名称的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初次使用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>

运行结果符合我们的预期,使用了我们指定的数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值