FluentNHibernate无法从web.config读取connectionString

时间:2017-01-22 07:56:57

标签: c# asp.net nhibernate

当我使用FluentNHibernate时,它无法从web.config读取连接字符串。我使用的是ASP.NET核心Web应用程序(.NET Framework),Fluent NHibernate 2.0.3和NHibernate 4.0.0.4000。

注释方式可以很好地访问数据库,而未注释的方法不起作用。

        return Fluently.Configure()
            //.Database(MySQLConfiguration.Standard.ConnectionString("Server=localhost;Port=3307; Uid=root; Pwd=usbw;Database=hellonhibernate"))
            .Database(MySQLConfiguration.Standard.ConnectionString(c => c.FromConnectionStringWithKey("TRP123456")))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PersonMap>())
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SessionMap>())
            .ExposeConfiguration(CreateSchema)
            .BuildSessionFactory();

web.config是

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <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>
    <connectionStrings>
        <add name="TRP123456" connectionString="server=localhost;port=3307;uid=root;password=admin;database=hellonhibernate;" providerName="MySql.Data.MySqlClient"/>
    </connectionStrings>
</configuration>

这是我得到的错误。请帮忙看看有什么问题。谢谢。

enter image description here

项目结构如下

enter image description here

1 个答案:

答案 0 :(得分:1)

首先检查这个问题我认为它可以解决您的问题Access WebConfig in DotNet Core

另一种解决方案是使用appsettings.json文件。

您可以通过向项目添加json文件来实现。与project.json文件相同的文件夹。

在您的startup.cs中,您只需将文件映射到您的应用配置,如下所示:

public static IConfigurationRoot Configuration = null;
 public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) // in my case the file name is appsettings.json
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();

        Configuration = builder.Build(); // returns IConfigurationRoot that can be used to access your settings later
    }

现在我不确定我在那里创建的静态变量可能不是最好的方法。但它给了我所需要的东西。

然后,您可以使用它来获取类似的连接字符串:

Startup.Configuration["AppSettings:ConnectionString"]

鉴于您在appsettings.json文件中有一个ConnectionString键。

{  
 "AppSettings": 
  {
   "ConnectionString": "" //type your connection string in here 
  }
}

更好的是添加如下的AppSettings类:

 public class AppSettings
{
    public string ConnectionString { get; set; }
}

现在您需要将其映射为服务(将其添加到您的中间件)。

public void ConfigureServices(IServiceCollection services)
    { 
        //other services
        services.Configure<AppSettings> Configuration.GetSection("AppSettings"));
        //other services
    }

所以你可以把它注入你的控制器:

 public class HomeController : Controller
 {
    public _appsettings;
    public HomeController(IOptions<AppSettings> appSettings)
    {
       _appsettings = appSettings;
    }
 }

最后,您现在可以通过调用控制器中的_appsettings.ConnectionString来获取连接字符串。