C# 如何在Jonathan Oliver';什么是活动商店?
下面的代码将为命名连接创建eventstoreC# 如何在Jonathan Oliver';什么是活动商店?,c#,event-sourcing,neventstore,C#,Event Sourcing,Neventstore,下面的代码将为命名连接创建eventstore var es = Wireup.Init() .UsingSqlPersistence("DB") .Build(); 我需要像这样的东西: var es = Wireup.Init() .UsingSqlPersistence("Data Source=TEST;Initial Catalog=
var es = Wireup.Init()
.UsingSqlPersistence("DB")
.Build();
我需要像这样的东西:
var es = Wireup.Init()
.UsingSqlPersistence("Data Source=TEST;Initial Catalog=App")
.Build();
我发现最简单的方法是创建自定义IConnectionFactory,但这看起来并不正确。有什么建议吗?我没有找到使用任何内置类的方法,但是您提到的界面或多或少都很容易使用 使用joliver的代码,我实现了一个连接字符串工厂,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Configuration;
using System.Data;
using EventStore.Persistence.SqlPersistence;
using EventStore.Persistence;
namespace Project.Factories
{
public class ConnectionStringConnectionFactory : IConnectionFactory
{
private static readonly IDictionary<string, DbProviderFactory> CachedFactories =
new Dictionary<string, DbProviderFactory>();
private string m_connectionString;
private string m_providerName;
private string m_replicaConnectionString;
private string m_replicaProviderName;
public ConnectionStringConnectionFactory(string connectionString, string providerName)
: this(connectionString, providerName, connectionString, providerName)
{
}
public ConnectionStringConnectionFactory(
string connectionString,
string providerName,
string replicaConnectionString,
string replicaProviderName)
{
m_connectionString = connectionString;
m_providerName = providerName;
m_replicaConnectionString = replicaConnectionString;
m_replicaProviderName = replicaProviderName;
}
public virtual IDbConnection OpenMaster(Guid streamId)
{
return this.Open(streamId, m_connectionString, m_providerName);
}
public virtual IDbConnection OpenReplica(Guid streamId)
{
return this.Open(streamId, m_replicaConnectionString, m_replicaProviderName);
}
protected virtual IDbConnection Open(Guid streamId, string connectionString, string providerName)
{
return new ConnectionScope(connectionString, () => this.Open(connectionString, providerName));
}
protected virtual IDbConnection Open(string connectionString, string providerName)
{
var factory = this.GetFactory(providerName);
var connection = factory.CreateConnection();
if (connection == null)
throw new ConfigurationErrorsException("Invalid provider name");
connection.ConnectionString = connectionString;
try
{
connection.Open();
}
catch (Exception e)
{
throw new StorageUnavailableException(e.Message, e);
}
return connection;
}
protected virtual DbProviderFactory GetFactory(string providerName)
{
lock (CachedFactories)
{
DbProviderFactory factory;
if (CachedFactories.TryGetValue(providerName, out factory))
return factory;
factory = DbProviderFactories.GetFactory(providerName);
return CachedFactories[providerName] = factory;
}
}
public ConnectionStringSettings Settings
{
get { return new ConnectionStringSettings("Default", m_connectionString, m_providerName); }
}
}
}
如果需要,可以将其包装在扩展方法中:
Wireup.Init().UsingSqlPersistenceWithConnectionString("")
创建了一个支持连接字符串配置的拉取请求 如果不接受,您仍然可以使用该代码在您自己的项目中启用连接字符串配置,这只是几行代码 更新:接受拉取请求,从NEventstore的5.1版开始提供。现在可以在nuget上使用
Wireup.Init().UsingSqlPersistenceWithConnectionString("")