如何在应用程序启动时使用 Marten 创建数据库?
How to create database with Marten on application start?
如果数据库不存在,我希望 Marten 在配置我的事件存储时创建它。我在 documentation 中发现我需要使用以下代码片段来实现这种行为:
services
.AddSingleton<IDocumentStore>(DocumentStore.For(options =>
{
options.Connection(connectionString);
options.DatabaseSchemaName = schemaName;
options.Serializer(GetCustomJsonSerializer());
options.CreateDatabasesForTenants(databaseConfig =>
{
databaseConfig
.MaintenanceDatabase(connectionString)
.ForTenant()
.CheckAgainstPgDatabase()
.WithOwner(eventStoreSettings.DatabaseOwner)
.WithEncoding(eventStoreSettings.Encoding)
.ConnectionLimit(eventStoreSettings.ConnectionLimit);
});
}));
文档说“如果连接尝试导致无效目录错误 (3D000),则会触发数据库创建。”。附加代码确实会导致上述错误 (3D000),但我没有触发数据库创建,而是收到以下未处理的异常:“Npgsql.PostgresException (0x80004005): 3D000: 数据库“UserDatabase1”不存在
在Npgsql.NpgsqlConnector”。连接字符串中使用的用户权限是正确的。如果数据库不存在,如何使用Marten创建数据库?我做错了什么?
您的 MaintenanceDatabase
连接字符串必须与您的 marten 数据存储区连接不同。
请注意,MaintenanceDatabase
连接必须具有创建数据库权限才能工作。只需使用没有任何数据库的 root 用户就可以了。例如:
"Host=localhost;Username=sa;Password=Pass@word"
如果数据库不存在,我希望 Marten 在配置我的事件存储时创建它。我在 documentation 中发现我需要使用以下代码片段来实现这种行为:
services
.AddSingleton<IDocumentStore>(DocumentStore.For(options =>
{
options.Connection(connectionString);
options.DatabaseSchemaName = schemaName;
options.Serializer(GetCustomJsonSerializer());
options.CreateDatabasesForTenants(databaseConfig =>
{
databaseConfig
.MaintenanceDatabase(connectionString)
.ForTenant()
.CheckAgainstPgDatabase()
.WithOwner(eventStoreSettings.DatabaseOwner)
.WithEncoding(eventStoreSettings.Encoding)
.ConnectionLimit(eventStoreSettings.ConnectionLimit);
});
}));
文档说“如果连接尝试导致无效目录错误 (3D000),则会触发数据库创建。”。附加代码确实会导致上述错误 (3D000),但我没有触发数据库创建,而是收到以下未处理的异常:“Npgsql.PostgresException (0x80004005): 3D000: 数据库“UserDatabase1”不存在 在Npgsql.NpgsqlConnector”。连接字符串中使用的用户权限是正确的。如果数据库不存在,如何使用Marten创建数据库?我做错了什么?
您的 MaintenanceDatabase
连接字符串必须与您的 marten 数据存储区连接不同。
请注意,MaintenanceDatabase
连接必须具有创建数据库权限才能工作。只需使用没有任何数据库的 root 用户就可以了。例如:
"Host=localhost;Username=sa;Password=Pass@word"