【问题标题】:How to create database with Marten on application start?如何在应用程序启动时使用 Marten 创建数据库?
【发布时间】:2021-07-09 17:08:34
【问题描述】:

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

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

【问题讨论】:

    标签: c# postgresql .net-core marten


    【解决方案1】:

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

    "Host=localhost;Username=sa;Password=Pass@word"
    

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多