我的解决方案包含两个项目。一个是Web API / angular2应用程序,另一个是与实体框架接口的数据访问层。我的Web应用程序项目引用此数据层项目以创建/检索数据。
尝试从我的数据库上下文中的dbsets添加新数据或检索时出现以下错误:
System.Data.SqlClient.SqlException:'与SQL Server建立连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 - 找到指定的服务器/实例时出错)'
以下是我的数据层项目中的应用配置:
<?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="mssqllocaldb"/>
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
<connectionStrings>
<add name="SettingBuilder" connectionString="Data Source=(LocalDb)\ProjectsV13;Initial Catalog=SettingBuilder;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/></startup></configuration>
我已经在web api项目的web.config中复制了这个:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<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="mssqllocaldb"/>
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
<connectionStrings>
<add name="SettingBuilder" connectionString="Data Source=(LocalDb)\ProjectsV13;Initial Catalog=SettingBuilder;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
数据库确实存在 - 当我尝试从包管理器控制台添加迁移或更新数据库时,没有问题,这些都成功了。
我无法从Web API项目连接到数据库的原因是什么,但是从控制台执行此操作没有问题?
这是我的数据库上下文类的结构:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
namespace SettingBuilder.Data
{
public class SettingBuilderContext : DbContext
{
public DbSet<Setting> Settings { get; set; }
public SettingBuilderContext() //: base("SettingBuilder")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Setting>().ToTable("Setting");
}
}
}
我遵循一个工作单元模式 - 为了避免在这里粘贴所有代码,实例化一个工作单元也实例化db上下文。以下是我在web api中从控制器看的内容:
[HttpPost("[action]")]
public void CreateSetting([FromBody]Setting setting)
{
_unitOfWork.SettingRepository.CreateSetting(setting);
_unitOfWork.Save();
}
非常感谢任何帮助。
编辑:我已经制作了一个简单的控制台应用程序来测试它。从控制台应用程序,它的工作原理 - 我刚刚从我的数据层项目中复制了app.config。但是,DB已在具有完全限定名称的不同位置创建,而不是我在app.config中指定的名称(它创建了SettingBuilder.Data.SettingBuilderContext作为数据库)这使我假设框架没有引用我的app配置文件。有没有办法配置它?
编辑2:如果我手动硬编码我的连接字符串,这也有效。我只是将它从webconfig复制到db上下文初始化。