app.config,用于从wpf和asp.net访问数据?

w1e3prcc  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(267)

我第一次尝试使用sql在我的一个项目中存储数据,我使用本教程是因为它对我最有意义,说实话,我喜欢男生的视频,讨厌在找到一个我可以学习的视频之前点击上百个不好的视频。
无论如何,我正在制作一个应用程序,我需要访问并保存到我在mssms中制作的sql数据库,我有一个用于逻辑的类库,一个用于数据访问的数据类库,以及一个wpf接口(我还计划添加一个asp接口,该接口具有较少的编辑功能,但是添加web api,这一切都是为了学习)
在连接dapper的视频中,这个家伙设置了一个helper来获取连接字符串,但是这是通过configurationmanager来查找app.config的(他说它是烘焙的,你只需要添加一个引用,但是现在看起来是一个nuget包)。
但我没有 App.config 任何地方,我从来没有用过,所以我不知道我应该添加它,它会做什么,我会添加到哪里?或者我现在使用.NETCore而不是.NETFramework做一些完全不同的事情。
抱歉,很长的帖子,也许没有它应该是清楚的,但我在这里挣扎的第一个障碍,谷歌似乎是无用的这一个。
作为补充说明,我还计划将对象中的键值对保存为 Dictionary<string, string> ),我是否最好只为这些表创建一个新表,并将它关联的对象的id、键和值存储在它们自己的列中?

mpgws1up

mpgws1up1#

下面是一个基本的dotnet核心命令行exe
注意,这是本文的一个松散的迷你实现:https://docs.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures
https://github.com/granadacoder/dotnet-core-on-linux-one/tree/master/src/consoleone
典型的appsettings.json内容
https://github.com/granadacoder/dotnet-core-on-linux-one/blob/master/src/consoleone/appsettings.json

{
  "ConnectionStrings": {
    "MyConnectionString": "Data Source=someServer\someInstance,1433;Database=master;User Id=sa;Password=Password1#;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  },
  "AllowedHosts": "*"
}

顶层包含并定义了这些值。在我的示例中,“consoleone”是顶层。
我还有一个bal和dal层。
https://github.com/granadacoder/dotnet-core-on-linux-one/tree/master/src/bal
https://github.com/granadacoder/dotnet-core-on-linux-one/tree/master/src/dal
我的示例使用dapper,它会对连接字符串进行钓鱼
https://github.com/granadacoder/dotnet-core-on-linux-one/blob/master/src/dal/employeedatalayer.cs

public class EmployeeDataLayer : IEmployeeDataLayer
{
    private readonly Microsoft.Extensions.Configuration.IConfiguration config;

    public EmployeeDataLayer(Microsoft.Extensions.Configuration.IConfiguration config)
    {
        this.config = config;
    }

    public IDbConnection Connection
    {
        get
        {
            string connectionString = this.config.GetConnectionString("MyConnectionString");
            return new SqlConnection(connectionString);
        }
    }

    public async Task<Employee> GetByID(int id)
    {
        using (IDbConnection conn = this.Connection)
        {
            string sql = "SELECT ID, FirstName, LastName, DateOfBirth FROM Employee WHERE ID = @ID";
            sql = "SELECT TOP 1 id as ID, 'FName' + name as FirstName, 'LName' + name as LastName, crdate as DateOfBirth FROM sysobjects order by id";
            conn.Open();
            var result = await conn.QueryAsync<Employee>(sql, new { ID = id });
            return result.FirstOrDefault();
        }
    }

    public async Task<ICollection<Employee>> GetByDateOfBirth(DateTime dateOfBirth)
    {
        using (IDbConnection conn = this.Connection)
        {
            string sql = "SELECT ID, FirstName, LastName, DateOfBirth FROM Employee WHERE DateOfBirth = @DateOfBirth";
            sql = "SELECT TOP 3 id as ID, 'FName' + name as FirstName, 'LName' + name as LastName, crdate as DateOfBirth FROM sysobjects order by id";

            conn.Open();
            var result = await conn.QueryAsync<Employee>(sql, new { DateOfBirth = dateOfBirth });
            return result.ToList();
        }
    }
}

(注意,我上面的dal代码并没有命中真正的后端表,它只是一个简单的演示)
但回到配置上:
我通过将配置对象“注入”到类中来实现这一点(参见构造函数)
对于dotnetcore,通常使用内置的ioc/di
你可以在这里看到:
https://github.com/granadacoder/dotnet-core-on-linux-one/blob/master/src/consoleone/program.cs

private static IServiceProvider BuildDi(IConfiguration config)
    {
        string connectionString = config.GetConnectionString("MyConnectionString");

        return new ServiceCollection()
            .AddSingleton<IEmployeeManager, EmployeeManager>()
            .AddTransient<IEmployeeDataLayer, EmployeeDataLayer>()

            .AddLogging(loggingBuilder =>
            {
                // configure Logging with NLog
                loggingBuilder.ClearProviders();
                loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
                loggingBuilder.AddNLog(config);
            })

            .AddSingleton<IConfiguration>(config)
            .BuildServiceProvider();
    }
ff29svar

ff29svar2#

最后,我转到ui add>newitem>application配置文件app.config并使用以下代码

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <clear/>
        <add name="Thenameasusedinmyapp" connectionString="Server =.; Database = NameofDatabase; Trusted_Connection = True;" providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

相关问题