自定义的类 不能使用using。需要释放或者关闭的可以用using 比如
using(SqlConnection conn=new SqlConnection()){}
你只能
DashengDbContext context = new DashengDbContext();
contenxt方法();
假设是AppSettings节点下
string connectionString=
SystemConfigurationConfigurationManagerAppSettings["RSDbContext"];
或者 直接读取xml文件 即节点add 下的属性name=RSDbContext的
模仿下面的读取xml代码
//using SystemXml;/// <summary>
/// 通过键获取appSettings的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetValueByKey(string key)
{
XmlDocument doc = new XmlDocument();
docLoad(AppDomainCurrentDomainBaseDirectory + "configxml");
XmlNode node = docDocumentElementChildNodes[1];
//找到appSettings节点
foreach (XmlNode childNode in nodeChildNodes)
{
if (childNodeName == "add" && childNodeAttributes["name"] != null && childNodeAttributes["name"]InnerText == key)
{
return childNodeAttributes["connectionString"]InnerText;
}
}
return "";
}
数据库为Oracle,就不要使用EF了。
问题已经很明显。“Make sure the provider is registered in the 'entityFramework' section of the application config file”,就是让你看看在Appconfig文件中的<provider>。
源文件中的内容如下:
<entityFramework>
<provider invariantName="SystemDataSqlClient" type="SystemDataEntitySqlServerSqlProviderServices, EntityFrameworkSqlServer" />
</entityFramework>
按理说,只要将<provider />写成:
<provider invariantName="OracleManagedDataAccessClient" type="SystemDataOracleProviderServices, EntityFrameworkOracleServer" />
之类即可,但是可悲啊!
目前支持EF6的provider有:
(1)Microsoft SQL Server provider
(2)Microsoft SQL Server Compact Edition provider
(3)Devart dotConnect Data Providers 注意
(4)Firebird provider
(5)Visual Fox Pro porvider
(6)MySQL
(7)PostgreSQL
1、2、4、5、7均可以从NuGget中获取。3、7需要到相应的网站获取。
注意第三个:这个插件就是用于Oracle数据库的,其为第三方插件,由Devart公司开发。但有两大致命缺点:1、收费(是30天免费试用,过了30天要么卸载,要么付款)。2、目前支持的Oracle的最高版本为:Oracle82i。
以常见的mysql和oracle这两种数据库为例:
一、连接mysql(mysql服务已开启)
1、mysql数据库安装在本机,则直接敲入命令mysql -u root -p即可。
2、mysql数据库不是安装在本机,则需要加参数,常用参数如下:
1),-h,指定目标ip地址
2),-u,指定登录用户名。
3),-p,指定密码,密码可以接在-p后面输入mysql -uroot -p123456。也可以mysql -uroot -p回车等提示输入密码时输入,这样输入密码没有回显。
二、连接oracle数据库
1、若当前用户为root用户,则需要执行命令 su - oracle切换至oracle用户;若当前用户为oracle用户则此步骤省略。
2、若oracle安装在本机,则在oracle用户下直接执行sqlplus username/password(username,password替换成真实的用户名和密码),若提示connected则表示连接成功;
3、若oracle安装在其他机器,则在oracle用户下执行sqlplus username/password@//host:port/sid。host为oracle所在机器的ip或者机器名,port为端口号,通常为1521,sid指oracle的实例名。
扩展资料:
linux下 *** 作数据库(以mysql为例)的其他命令
一、linux下查看mysql服务的命令两种方式:
1、[root@localhost bin]ps -ef|grep mysql
2、[root@localhost bin]netstat -nlp
二、linux下启动mysql服务的两种方式:
1、命令方式:
[root@localhost bin]cd /usr/bin
[root@localhost bin]/mysqld_safe &
2、服务方式:
[root@localhost ~]service mysql start
如果服务在启动状态,直接重启服务用以下命令:[root@localhost ~]service mysql restart
三、linux下关闭mysql服务的两种方式:
1、命令方式:
[root@localhost ~]mysqladmin -u root shutdown
2、服务方式:
[root@localhost ~]service mysql stop
参考资料:
1、这个 providerName="SystemdataSqlClient" 在EF41里面是必须有的,没有就会报错,为什么现在我也不知道,如果有知道的,希望能告诉一声,感激不尽。
2、database数据库的名称必须和继承DbContext基类的类的类名相同
3、Integrated Security=true;这个是在 当修改 模型的之后 和数据库架构进行比对,发现不同的时候就会将数据库删除重建,这是要删除数据库的就要 告诉数据库此 *** 作是安全的
注意这里面每个net framework都有两个版本,一个带有bundle字眼,一个没有。一个安装的DLL里面包含SQLiteInteropdll,而另一个没有。如果你运行代码的时候报
逗无法加载SQLiteInteropdll地的错误,则将安装文件中的
SQLiteInteropdll拷贝到Bin文件中即可。或是在NuGet下载的
packages\SystemDataSQLiteCore10940\build中也有对应的程序。
示例代码
Modelcs
public class Person
{
public Int64 Id { get; set; } //注意要用Int64
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Person> Persons { get; set; }
public MyContext()
: base("SqliteTest")
{
}
}
Programcs
static void Main(string[] args)
{
MyContext context = new MyContext();
var empList = contextPersonsOrderBy(c => cFirstName)ToList();
ConsoleWriteLine(empListCount);
Person people = new Person()
{
FirstName = "Hello",
LastName = "World"
};
contextPersonsAdd(people);
contextSaveChanges();
ConsoleReadLine();
}
示例代码很简单,就是用EF对Person表进行新增与查看。
配置config文件
如果你是用NuGet获取Sqlite,会自动在config中配置一些相关的信息。
<xml version="10" encoding="utf-8">
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit -->
<section name="entityFramework" type="SystemDataEntityInternalConfigFileEntityFrameworkSection, EntityFramework, Version=6000, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="SqliteTest" connectionString="data source=SqliteTestdb" providerName="SystemDataSQLiteEF6" />
</connectionStrings>
<startup>
<supportedRuntime version="v40" sku="NETFramework,Version=v45" />
</startup>
<systemdata>
<DbProviderFactories>
<add name="SQLite Data Provider" invariant="SystemDataSQLite" description="NET Framework Data Provider for SQLite" type="SystemDataSQLiteSQLiteFactory, SystemDataSQLite" />
<remove invariant="SystemDataSQLite" />
<remove invariant="SystemDataSQLiteEF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="SystemDataSQLiteEF6" description="NET Framework Data Provider for SQLite (Entity Framework 6)" type="SystemDataSQLiteEF6SQLiteProviderFactory, SystemDataSQLiteEF6" />
</DbProviderFactories>
</systemdata>
<entityFramework>
<defaultConnectionFactory type="SystemDataEntityInfrastructureLocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v110" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="SystemDataSqlClient" type="SystemDataEntitySqlServerSqlProviderServices, EntityFrameworkSqlServer" />
<provider invariantName="SystemDataSQLiteEF6" type="SystemDataSQLiteEF6SQLiteProviderServices, SystemDataSQLiteEF6" />
</providers>
</entityFramework>
</configuration>
其中数据连接串是:
<add name="SqliteTest" connectionString="data source=SqliteTestdb" providerName="SystemDataSQLiteEF6" />
注意提供程序集是SystemDataSQLiteEF6。
但是这个配仍然是错误的。
如果此时运行程序,会报错:
Unable to determine the provider name for
provider factory of type 'SystemDataSQLiteSQLiteFactory' Make sure
that the ADONET provider is installed or registered in the application
config
或中文错误信息:
未找到具有固定名称逗SystemDataSQLite地的 ADONET 提供程序的实体框架提供程序。请确保在应用程序配置文件的逗entityFramework地节中注册了该提供程序。
意思是EF没有找到提供SystemDataSQLiteSQLiteFactory的dll,我们看看现在config中的entityFramework节点:
<entityFramework>
<defaultConnectionFactory type="SystemDataEntityInfrastructureLocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v110" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="SystemDataSqlClient" type="SystemDataEntitySqlServerSqlProviderServices, EntityFrameworkSqlServer" />
<provider invariantName="SystemDataSQLiteEF6" type="SystemDataSQLiteEF6SQLiteProviderServices, SystemDataSQLiteEF6" />
</providers>
</entityFramework>
有SystemDataSQLiteEF6与
SystemDataSqlClient,确实没有名称为SystemDataSQLite的提供程序。这里我一直不明白为什么sqlite会去
找名称为SystemDataSQLite的提供程序,因为我们在连接串中配置的provider也是
SystemDataSQLiteEF6。
那我们就在EF的配置节点中增加一个名为SystemDataSQLite的provider,但type仍然是SystemDataSQLiteEF6。最终的配置如图:
红色部分是配置有变化的地方。
这里再运行程序就可以了。
注意:
1连接串的配置。
数据连接串可以指定绝对地址,也可以指定相对地址。像我的data
source=SqliteTestdb,则SqliteTestdb要在Bin文件夹中,如果是web程序可以通过Data
Source=|DataDirectory|\SqliteTestdb来配置在App_Data文件平中。
2如果没有指定数据库中的表文件名,EF生成的SQL表都是用复数表示。就像我的程序中实体名是Person,但EF去查找的表名会是People。所以在数据库中定义的表名是People。
3不支持CodeFirst模式,您需要自己先设计好Sqlite的表结构。
方法/步骤
1
EF的Code First模式不需要我们创建什么数据向导,直接写代码就行了。我们用NET最简单的控制台应用程序来说明。如下图所示
2
下面我们新建两个实体,一个实体是班级对象,一个实体是学生对象,注意这两个对象是一对多的关系,他们的构建如下图所示,注意他们声明上面的属性标识
3
然后我们需要引用两个库,一个就是我们的EntityFramework,另一个就是SystemDataEntity
4
下面就是主要写EF的上下文对象了,如下图所示,需要继承EF的DbContext。注意base里的名字为连接字符串名字,在AppConfig中配置即可。为了说明CodeFirst的魅力,这里我填写的数据库,在数据库中并没有
5
下面我们在主函数中新增班级对象,然后执行EF的SaveChanges方法
6
看一下我们的数据库吧,你会发现数据库中是不是多出来了一个我们在配置文件中写的数据库名字,并且也已经将表创建好了
7
通过以上的步骤,你感觉到EF的Code First模式的魅力了没,自动创建数据库以及表。这也是现在应用最多的模式了,好了,这次分享就到这里。有什么问题的话,留言咨询即可。
以上就是关于EF框架App.config,我配置了两个数据库连接字符串,问题是怎么使用全部的内容,包括:EF框架App.config,我配置了两个数据库连接字符串,问题是怎么使用、用EF连接Oracle数据库,运行报错、在Linux上用命令怎么连接数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)