2

如果数据库不存在,我希望 Marten 在配置我的事件存储时创建它。我在文档中发现我需要使用以下代码片段来实现这种行为:

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 创建数据库?我究竟做错了什么?

4

1 回答 1

1

您的MaintenanceDatabase连接字符串必须与您的 marten 数据存储连接不同。请注意,MaintenanceDatabase连接必须具有创建数据库权限才能工作。只需使用没有任何数据库的root用户就可以了。例如:

"Host=localhost;Username=sa;Password=Pass@word"
于 2021-06-29T03:49:45.567 回答