C# 实体框架和SQL Server数据库连接字符串
我已经使用EF一段时间了,我一直使用LocalDb来存储数据。我想开始使用SQL Server数据库,但在设置连接字符串时遇到了一些问题 我查看了google,但没有一个答案能在我的案例中起作用,所以我一定是做错了什么(一些连接字符串抛出了一个异常,其他的没有,但也不会在数据库中插入任何内容) 我的问题是,在使用EF&SQL Server时,我应该同时使用C# 实体框架和SQL Server数据库连接字符串,c#,sql-server,database,entity-framework,connection-string,C#,Sql Server,Database,Entity Framework,Connection String,我已经使用EF一段时间了,我一直使用LocalDb来存储数据。我想开始使用SQL Server数据库,但在设置连接字符串时遇到了一些问题 我查看了google,但没有一个答案能在我的案例中起作用,所以我一定是做错了什么(一些连接字符串抛出了一个异常,其他的没有,但也不会在数据库中插入任何内容) 我的问题是,在使用EF&SQL Server时,我应该同时使用App.config中的连接字符串和在上下文的CTOR中设置DB的路径(通过使用AppDomain.CurrentDomain.SetDa
App.config
中的连接字符串和在上下文的CTOR中设置DB的路径(通过使用AppDomain.CurrentDomain.SetData(“DataDirectory”,path);
)还是App.config
足够
我尝试了以下连接字符串:
Data Source=.\GURUBEAST-PC\GURUSQL;Initial Catalog=iManager;Trusted_Connection=True;MultipleActiveResultSets=True;
Data Source=.\GURUBEAST-PC\GURUSQL;Database=iManager;Integrated Security=True;Trusted_Connection=True;MultipleActiveResultSets=True;
Data Source=.\GURUBEAST-PC\GURUSQL;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL11.GURUSQL\MSSQL\DATA\iManager.mdf;Database=iManager;Trusted_Connection=True;MultipleActiveResultSets=True;
Data Source=.\GURUBEAST-PC\GURUSQL;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL11.GURUSQL\MSSQL\DATA\iManager.mdf;Database=iManager;Trusted_Connection=True;
Data Source=.\GURUBEAST-PC\GURUSQL;Database=iManager;Trusted_Connection=True;
Data Source=.\GURUBEAST-PC\GURUSQL;Initial Catalog=iManager;Integrated Security=SSPI;
Data Source=.\GURUBEAST-PC\GURUSQL;Initial Catalog=iManager;User id=GURUBEAST-PC\GuruBeast;
其中“iManager”是数据库的名称。我对我的SQL Server实例使用Windows auth
我做错了什么?我应该设置程序文件文件夹的路径还是设置应用程序数据的路径(我都看过,都试过了,但都不起作用)
亲切的问候 一旦您确定了主机名,Entity Framework将为您生成连接字符串。下面是一个示例,说明了如果您试图连接到托管在本地SQL Server 2014实例上的AdventureWorks数据库(该实例的名称为sql2014),则连接字符串可能是什么样子
<connectionStrings>
<add name="AdventureWorksEntities" connectionString="metadata=res://*/DataModels.AdventureWorksDb.csdl|res://*/DataModels.AdventureWorksDb.ssdl|res://*/DataModels.AdventureWorksDb.msl;provider=System.Data.SqlClient;provider connection string="data source=.\sql2014;initial catalog=AdventureWorks;persist security info=True;user id=App_AdventureWorks;password=asdasdfasdfasdf;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
一旦计算出主机名,EntityFramework将为您生成连接字符串。下面是一个示例,说明了如果您试图连接到托管在本地SQL Server 2014实例上的AdventureWorks数据库(该实例的名称为sql2014),则连接字符串可能是什么样子
<connectionStrings>
<add name="AdventureWorksEntities" connectionString="metadata=res://*/DataModels.AdventureWorksDb.csdl|res://*/DataModels.AdventureWorksDb.ssdl|res://*/DataModels.AdventureWorksDb.msl;provider=System.Data.SqlClient;provider connection string="data source=.\sql2014;initial catalog=AdventureWorks;persist security info=True;user id=App_AdventureWorks;password=asdasdfasdfasdf;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
数据源密钥用于查找运行Sql Server实例的计算机。
您可以为它设置不同的字符串,但在LAN环境中最常用的字符串是使用服务器机器的名称,后跟最终的实例名称 因此,如果您的本地PC名为GURUBEAST-PC,并且在安装时未指定任何实例名称,则connectionstring数据源仅包含机器的名称GURUBEAST-PC。如果您有实例名称,则应将该实例名称添加到数据源密钥中。GURUBEAST-PC\GURUSQL 这将保证同一LAN中的所有PC都有可能具有相同的连接字符串,前提是连接来自运行SQL Server的同一台PC 如果数据源指向本地pc,则可以使用许多快捷方式来表示本地pc:
(LOCAL)
localhost
.
\.
并最终将实例名称添加到这些快捷方式中,而无需重复PC名称数据源键用于查找运行Sql Server实例的计算机。
您可以为它设置不同的字符串,但在LAN环境中最常用的字符串是使用服务器机器的名称,后跟最终的实例名称 因此,如果您的本地PC名为GURUBEAST-PC,并且在安装时未指定任何实例名称,则connectionstring数据源仅包含机器的名称GURUBEAST-PC。如果您有实例名称,则应将该实例名称添加到数据源密钥中。GURUBEAST-PC\GURUSQL 这将保证同一LAN中的所有PC都有可能具有相同的连接字符串,前提是连接来自运行SQL Server的同一台PC 如果数据源指向本地pc,则可以使用许多快捷方式来表示本地pc:
(LOCAL)
localhost
.
\.
并最终将实例名称添加到这些快捷方式中,而不重复PC名称这些是什么。\n在每个数据源键的开头?指定主机\实例名称时不需要它。您是否使用Sql Server Management Studio尝试过这些主机名?亲爱的先生,您刚刚度过了我的一天!我删除了“/”并使用了这个连接字符串:GURUBEAST-PC\GURUSQL;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL11.GURUSQL\MSSQL\DATA\iManager.mdf;数据库=iManager;Trusted_Connection=True;MultipleActiveResultSets=True;这就成功了。但是为什么我不应该使用“/”这不是对本地主机的引用?这是有意义的,因为使用SSMS它只使用“GURUBEAST-PC\GURUSQL”,而不使用“/”。。。我从没想过。非常感谢你!为什么我不能将您的响应标记为asnwer?它们是什么。\n在每个数据源键的开头?指定主机\实例名称时不需要它。您是否使用Sql Server Management Studio尝试过这些主机名?亲爱的先生,您刚刚度过了我的一天!我删除了“/”并使用了这个连接字符串:GURUBEAST-PC\GURUSQL;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL11.GURUSQL\MSSQL\DATA\iManager.mdf;数据库=iManager;Trusted_Connection=True;MultipleActiveResultSets=True;这就成功了。但是为什么我不应该使用“/”这不是对本地主机的引用?这是有意义的,因为使用SSMS它只使用“GURUBEAST-PC\GURUSQL”,而不使用“/”。。。我从没想过。非常感谢你!为什么我不能将您的响应标记为asnwer?我不知道“.csdl.ssdl&.msl”文件是什么,但我的解决方案中没有这些文件,我得到的错误是它们也不存在。他们是EF的shemas吗?我从来没有用过这些,实际上我总是以编程的方式创建所有东西。感谢Mitch的帮助,感谢Steve(你的答案实际上解决了我的问题,我会给你的答案打上标记,但我不清楚…?)我不知道“.csdl.ssdl&.msl”文件是什么,但我的解决方案中没有这些文件,我也收到了一个错误,即它们不存在。他们是EF的shemas吗?我从来没有用过这些,实际上我总是以编程的方式创建所有东西。谢谢米奇的帮助,也谢谢史蒂夫(你的回答实际上解决了我的问题,我会给你的答案打上记号,但我不能表面上…?)啊,那完全是真的