gpt4 book ai didi

visual-studio - CosmosDB项目布局

转载 作者:行者123 更新时间:2023-12-03 04:20:16 26 4
gpt4 key购买 nike

寻求建议和引用。

使用 Visual Studio,我的解决方案中有一个 Azure Web Apps 项目。现在,我正在为 CosmosDB 编写存储过程。使用 CosmosDB 模拟器,我可以简单地将存储过程代码直接插入浏览器编辑器窗口中。一切都很好,一切都很顺利。

我的 Web 应用程序项目旁边还有一个 NodeJS 项目。这允许我将存储过程存储为文件。关联的控制台应用程序能够按预期连接和修改 CosmosDB 模拟器。

我的问题是,使用 Visual Studio,布局我的项目的最佳方式是什么,这样它就不会在餐巾纸和祈祷上完成?

我想知道应该如何构建我的项目布局和 Assets 以符合当前的“最佳实践”。你们发现有什么信息、文章或帖子专门讨论这个问题吗?我会手动针对 CosmosDB 运行所有这些过程,还是人们设计了自动化过程?我希望能够首先针对模拟器测试这些存储过程,并且几乎不需要更改源代码,即可更新暂存。

谢谢!

最佳答案

我最近刚刚问自己关于存储过程迁移的同样问题。我当前正在运行一个基本的 Migrate 方法,该方法将从 js 文件获取存储过程内容并替换/创建存储过程,这在启动时运行(在startup.cs中)

以下代码的主要要点,您将需要创建非常基本的内部方法(欢迎评论):

using System;
using System.IO;
using System.Threading.Tasks;
using App.Data.Access;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Azure.Documents;

namespace App.Data.StoredProcedures
{
public class Migrations : IMigrations
{
private readonly IHostingEnvironment _hostingEnvironment;
private readonly IDocumentDbContext _documentDbContext;

public Migrations(IHostingEnvironment hostingEnvironment,IDocumentDbContext documentDbContext)
{
_hostingEnvironment = hostingEnvironment;
_documentDbContext = documentDbContext;
}

public async Task<bool> Migrate()
{
try
{
await AddUpdateBulkDeleteStoredProcedure();

return true;
}
catch (Exception exception)
{
throw new Exception("Error running CosmosDb stored procedure migrations,error" + exception.Message);
}
}

public string GetStoredProcedureScript(string filename)
{
var script = Path.Combine(_hostingEnvironment.WebRootPath, "App_Data", "CosmosDbStoredProcedures", filename);
return IO.File.ToString(script);
}

public async Task<bool> AddUpdateBulkDeleteStoredProcedure()
{
const string storedProcedureId = "BulkDeleteStoredProcedure";

var function = GetStoredProcedureScript($"{storedProcedureId}.js");

if (string.IsNullOrWhiteSpace(function))
{
throw new Exception($"Error running DocumentDb Stored procedure migrations, {storedProcedureId} content is empty");
}

try
{
await _documentDbContext.Client.ReplaceStoredProcedureAsync(_documentDbContext.GetStoredProcedureUri(storedProcedureId), new StoredProcedure {Id = storedProcedureId, Body = function});
return true;
}
catch
{
// ignore
}

await _documentDbContext.Client.CreateStoredProcedureAsync(_documentDbContext.DocumentCollectionUri, new StoredProcedure {Id = storedProcedureId, Body = function});

return true;
}
}
}

关于visual-studio - CosmosDB项目布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49791171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com