请注意,本站并不支持低于IE8的浏览器,为了获得最佳效果,请下载最新的浏览器,推荐下载 Chrome浏览器
欢迎光临。交流群:166852192

在ASP.NET Core中预处理YesSQL数据访问API


两周前,我发表了关于YesSQL简介的介绍,它介绍了YesSQL,YesSQL和NoSQL之间的区别以及我们如何使用它。

今天我将在ASP.NET Core中写出关于YesSQL的操作,以及如何进一步推出新的API来简化数据访问过程。
我在这篇文章中的目的是通过减少创建所需的代码来消除头痛DbConnectionFactoryStorageFactoryStore通过引入简单易读的API来初始化配置,使开发人员更轻松。
新API的命名约定最初是由EntityFramework Core(我们知道和喜欢的数据访问层)启发的。EF提供像API一样的API UseSqlServer()UseSqlite() 等等,基本上这些API让我们专注于我们需要编写的真实代码,而不是在我们代表的应该写的数据库配置设置中,与我一样的风格想要带我们正在使用YesSQL :)所以让我们挖掘代码。
首先让我们为数据库提供程序选项添加抽象,这只是提供者名称及其配置如下:
public interface IDbProviderOptions
{
    string ProviderName { get; set; }

    Configuration Configuration { get; set; }
}
public class DbProviderOptions : IDbProviderOptions
{
    public string ProviderName { get; set; }

    public Configuration Configuration { get; set; }
}
然后,我们需要添加AddDbProvider扩展方法,该方法负责IStore使用将提供的选项来注册单个服务  实例Action<IDbProviderOptions>
public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddDbProvider(
        this IServiceCollection services,
        Action<IDbProviderOptions> setupAction)
    {
        if (services == null)
        {
            throw new ArgumentNullException(nameof(services));
        }

        if (setupAction == null)
        {
            throw new ArgumentNullException(nameof(setupAction));
        }

        var options = new DbProviderOptions();
        setupAction.Invoke(options);
        services.AddSingleton<IStore>(new Store(options.Configuration));

        return services;
    }
}
之后,我们需要添加将在我们的应用程序中使用的必需的助手函数
public static class InMemoryDbProviderOptionsExtensions
{
    public static void UseInMemory(
        this IDbProviderOptions options)
    {
        if (options == null)
        {
            throw new ArgumentNullException(nameof(options));
        }

        var connectionString = "Data Source=:memory:";

        var configuration = new Configuration
        {
            ConnectionFactory = new DbConnectionFactory<SqliteConnection>(connectionString, true),
            DocumentStorageFactory = new InMemoryDocumentStorageFactory(),
            IsolationLevel = IsolationLevel.Serializable
        };

        options.ProviderName = "InMemory";
        options.Configuration = configuration;
    }
}
上述代码片段通过UseInMemory()扩展方法简化了InMemory数据库提供程序UseSqLite()适用于SqLite数据提供程序和UseSqlServer()SQL Server数据提供程序。
public static class SqLiteDbOptionsExtensions
{
    public static void UseSqLite(
        this IDbProviderOptions options, string connectionString)
    {
        if (options == null)
        {
            throw new ArgumentNullException(nameof(options));
        }

        var configuration = new Configuration
        {
            ConnectionFactory = new DbConnectionFactory<SqliteConnection>(connectionString, true),
            DocumentStorageFactory = new SqlDocumentStorageFactory(),
            IsolationLevel = IsolationLevel.Serializable
        };

        options.ProviderName = "SQLite";
        options.Configuration = configuration;
    }
}
public static class SqlServerDbProviderOptionsExtensions
{
    public static void UseSqlServer(
        this DbProviderOptions options, string connectionString)
    {
        if (options == null)
        {
            throw new ArgumentNullException(nameof(options));
        }

        var configuration = new Configuration
        {
            ConnectionFactory = new DbConnectionFactory<SqlConnection>(connectionString, true),
            DocumentStorageFactory = new SqlDocumentStorageFactory(),
            IsolationLevel = IsolationLevel.ReadUncommitted
        };

        options.ProviderName = "SQL Server";
        options.Configuration = configuration;
    }
}
类似于其他数据库提供程序,如MySQL,Postgres等。
现在是ConfigureServices()按照惯例方法中使用新创建的API的时候了
public void ConfigureServices(IServiceCollection services)
{    //services.AddDbProvider(options => options.UseInMemory());

    //services.AddDbProvider(options =>
    //    options.UseSqLite("Filename=YesSql.db"));

    services.AddDbProvider(options =>
        options.UseSqlServer("Server=.;Database=YesSql;Integrated Security=True"));
    ...
}
您可以从GitHub上的YesSQL存储库下载此帖子的源代码
原文:http://www.hishambinateya.com/prettify-yessql-data-access-apis-in-asp.net-core 

作者原创内容不容易,如果觉得内容不错,请点击右侧“打赏”,赏俩给作者花花,也算是对作者付出的肯定,也可以鼓励作者原创更多更好内容。
更多详情欢迎到QQ群 166852192 交流。