代码之家  ›  专栏  ›  技术社区  ›  granadaCoder

具有企业库数据(enterpriseLibrary.data.netcore)和json的dotnet核心(控制台应用程序)

  •  2
  • granadaCoder  · 技术社区  · 7 年前

    我尝试使用:

    企业数据库.data.netcore

    .nuget\packages\enterpriseLibrary.data.netcore\6.0.1313

    https://www.nuget.org/packages/EnterpriseLibrary.Data.NetCore/

    .NET核心2.1

    我有以下JSON

    {
      "ConnectionStrings": {
        "MyDefaultConnectionName": "Server=.\\MyInstance;Database=MyDB;Trusted_Connection=True;MultipleActiveResultSets=true"
      }
    }
    

    这段代码工作得很好(在我的program.cs.dotnet控制台应用程序中)(简单地显示了我的appsettings.json正在被获取,看起来我的连接字符串json结构是正确的。

    using Microsoft.Extensions.Configuration;
    
                IConfiguration config = new ConfigurationBuilder()
                        .SetBasePath(System.IO.Directory.GetCurrentDirectory())
                        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                        .Build();
    
    
                string conString = Microsoft
                   .Extensions
                   .Configuration
                   .ConfigurationExtensions
                   .GetConnectionString(config, "MyDefaultConnectionName");
    
                Console.WriteLine("MyDefaultConnectionName.conString='{0}'", conString);
    

    我明白了:

    myDefaultConnectionName.constring='server=\myInstance;database=mydb;trusted_connection=true;multipleActiveResultsets=true'

    但是,我尝试使用代码失败:

    using Microsoft.Practices.EnterpriseLibrary.Data;
    using System.Data;
    using System.Data.Common;
    
        public DataSet GetADataSet()
        {
            DataSet returnDs = null;
            string sql = "Select * from dbo.MyTable";
    
            try
            {
    
                DatabaseProviderFactory factory = new DatabaseProviderFactory();
                Database db = DatabaseFactory.CreateDatabase("MyDefaultConnectionName");
                DbCommand dbc = db.GetSqlStringCommand(sql);
                returnDs = db.ExecuteDataSet(dbc);
            }
            catch (Exception ex)
            {
                string temp = ex.Message;
                throw ex;
            }
    
            return returnDs;
        }
    

    例外情况是:

    运行“select*from dbo.mytable”(“myDefaultConnectionName”)(未为静态数据库工厂设置数据库提供程序工厂)时出现异常。设置调用databaseFactory.setProviderFactory方法或通过调用databaseFactory.setDatabases方法指定自定义映射的提供程序工厂。')

    我找到了这个链接…

    Microsoft.Practices.EnterpriseLibrary.Data.DLL but was not handled in user code

    以“旧”的基于XML的pre-dotnet核心。

    我也是这个项目的网站

    https://github.com/Chavoshi/EnterpriseLibrary.NetCore

    但找不到一个有效的例子

    … 关于我上面的代码行:

    databaseProviderFactory myFactory=new databaseProviderFactory();

    以及错误信息:

    数据库工厂.setProviderFactory

    MyFactory没有方法setProviderFactory

    ……

    我尝试过这个…(但我知道它实际上与XML属性不同(未来的读者,不要浪费时间在下面的JSON上)

    {
      "ConnectionStrings": {
        "MyDefaultConnectionName": "Server=.\\MyInstance;Database=MyDB;Trusted_Connection=True;MultipleActiveResultSets=true",
        "providerName": "System.Data.SqlClient"
      }
    }
    

    什么是神奇的语法糖使用

    https://github.com/chavoshi/enterpriselibrary.netcore网站

    使用Dotnet核心控制台应用程序?带JSON

    附加:

    基于这些评论,我还追寻了这个例子:

    https://github.com/Chavoshi/EnterpriseLibrary.NetCore/tree/master/Examples

    其中一个例子是基于XML的,而不是基于JSON的。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mo Chavoshi    7 年前

    谢谢你的解释。正如@panagiotis kanavos在评论中提到的,向库中添加JSON支持是一个重大的变化,需要大量的努力,当然我不能单独完成。

    顺便说一句,我要以某种方式开始 Enterprise Library Community 让它重新活跃起来——就像我以前(现在)是它的粉丝一样,因为我个人认为它真的很方便,特别是在 异常处理 登录中 块-所以绝对添加JSON支持将是新主要版本中最早的更改之一。

    但目前为止,这个项目只是为了帮助那些希望将旧项目转换为.NET核心的人,减少挑战,而不改变基础设施。

    最后,我很感谢有人能在社区帮助我,因为我已经开始与微软讨论这个问题,并等待他们决定让我更新官方软件包的新版本,以防我们要继续更新库。

    推荐文章