Вставка документов в эмулятор CosmosDB не работает в CosmosDB на Azure online - PullRequest
0 голосов
/ 08 июля 2019

Я переносу приложение из SQL Azure DB в Cosmos DB, и у меня возникают проблемы с хранением документов в CosmosDB.

Мое приложение написано на C # с использованием библиотеки Microsoft.Azure.DocumentDB.Когда я использую метод CreateDocumentAsync (Uri, object) из библиотеки Microsoft.Azure.DocumentDB, чтобы вставить запись, она проходит без ошибок.Когда я запрашиваю базу данных с помощью проводника данных Azure CosmosDB, я не вижу никаких записей, хотя в оболочке mongo count () указывает, что записи есть, и .find () выдает ошибку «Произошла неизвестная ошибка сервера при обработке этого запроса."

Я использовал библиотеку Microsoft.Azure.DocumentDB, чтобы сделать что-то вроде.Я проверил это с эмулятором, который работал.однако, когда я пытался соединить онлайн cosmosDB, я столкнулся с проблемой, что в тот момент, когда я вставляю документ с помощью метода CreateDocumentAsync (Uri, object) из библиотеки, я больше не могу видеть вставленные документы в dataexplorer comosDb.

Я пытался вставить его без идентификатора и пытался вставить его с идентификатором объекта _id, однако я продолжал получать ту же проблему.

Когда я смотрю в коллекцию через оболочку Монго, я вижу, чтодокумент был добавлен, но когда я использовал db.colleciton.find (), я получаю ошибку: «Произошла неизвестная ошибка сервера при обработке этого запроса».Код дальше по цепочке в состоянии получить документы.Я что-то пропустил?мне нужно установить параметр в Azure dB, или это известная проблема библиотеки?

class SalesOrder
{
    public string Id { get; set; }

            public string PurchaseOrderNumber { get; set; }

            public DateTime OrderDate { get; set; }

            public string AccountNumber { get; set; }

            public decimal SubTotal { get; set; }

            public decimal TaxAmt { get; set; }

            public decimal Freight { get; set; }

            public decimal TotalDue {get; set;}
    }

class Program
{
    private static readonly string endpointUrl = "endpoint";

    private static readonly string authorizationKey = "authorizationKey";

    private static readonly string databaseId = "databaseId";

    private static readonly string collectionId = "collectionId";

    private static DocumentClient client;

    static void Main(string[] args)
    {
        using (client = new DocumentClient(new Uri(endpointUrl), authorizationKey))
        {
            var collectionLink = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);

            Insert(collectionLink).Wait();
        }
    }

    private static async Task Insert(Uri collectionLink)
    {
        var orders = new List<object>();

        orders.Add(new SalesOrder

        {
            Id = "POCO1",

            PurchaseOrderNumber = "PO18009186470",

            OrderDate = new DateTime(2005, 7, 1),

            AccountNumber = "10-4020-000510",

            SubTotal = 419.4589m,

            TaxAmt = 12.5838m,

            Freight = 472.3108m,

            TotalDue = 985.018m
        });



        orders.Add(new SalesOrder

        {

            Id = "POCO2",

            PurchaseOrderNumber = "PO15428132599",

            OrderDate = new DateTime(2005, 7, 1),

            AccountNumber = "10-4020-000646",

            SubTotal = 6107.0820m,

            TaxAmt = 586.1203m,

            Freight = 183.1626m,

            TotalDue = 4893.3929m,
        });

        foreach (var order in orders)

        {

            Document created = await client.CreateDocumentAsync(collectionLink, order);



            Console.WriteLine(created);

        }
    }
}

1 Ответ

0 голосов
/ 08 июля 2019

Проблема в том, что у вас есть учетная запись Cosmos DB, которая использует MongoDB API, но вы пытаетесь создать данные с помощью SQL API SDK.

Если вы хотите использовать API MongoDB, когда вам нужно использовать MongoDB SDK , а не Cosmos DB.

Однако, если вы переходите с Azure SQLи у вас нет конкретной причины использовать API MongoDB, тогда вам просто нужно использовать API-интерфейс CosmosDB SQL и SDK, который вы уже используете.Если вы сделаете это, ваша проблема исчезнет.

Причина, по которой это происходит, заключается в том, что SDK SQL API создает файлы, выглядящие как SQL API, поэтому интерфейс CosmosDB MongoDB не может справиться с ними в пользовательском интерфейсе.

...