Хранить объект со свойством Dynamic в базе данных Cosmos - PullRequest
0 голосов
/ 30 мая 2018

У меня есть процессор сообщений, где я хотел бы взять кусочек json с оберткой известной схемы, но со свойством, которое является динамическим объектом, подобным следующему:

public class NotificationDetails
{
    [JsonProperty(PropertyName = "id")]
    public string NotificationID { get; set; }
    public DateTime? DateCreated { get; set; }
    public DateTime? DateSent { get; set; }
    public string TemplateUrl { get; set; }
    public dynamic Model { get; set; }
}

, как вы можетевидите, последнее свойство имеет динамический характер.все уведомления будут иметь разные схемы моделей, поэтому я хотел бы, чтобы они просто сохранялись как вложенный объект.

Тем не менее, когда я пытаюсь создать объект с помощью

client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(DatabaseId, collectionId), item)

Iполучить следующее сообщение об ошибке:

Наилучший перегруженный метод сопоставления для 'MyClass.CreateNotification (NotificationDetails))' имеет несколько недопустимых аргументов

Я думал, что могу бросить что-нибудь вэти документы.Что я делаю неправильно?я должен использовать что-то кроме динамического для этого свойства Model?

UPDATE Я понял, что это было кое-что о том, как я вызывал метод Wait () для задачи, возвращенной из DocumentClient.Как только я вернулся к стратегии асинхронного ожидания, она начала работать правильно.

1 Ответ

0 голосов
/ 01 июня 2018

По вашему описанию.Я проверил ваш код, и он работал, как показано ниже.Вы можете сослаться на то, что я сделал:

    public static void CreateCosmosDocument()
    {
        DocumentClient client = new DocumentClient(new Uri("https://xxxxx/"), "C2y6yDjf5/R+ob0N8A7Cgv30VRDJxxxxM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", new ConnectionPolicy { EnableEndpointDiscovery = false });

        TestEntity testEntity = new TestEntity { x = 11, y = 11, name = "wakaka", dynam = "hello dynam" };
        var createdItem = client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri("ToDoList", "Items"), new NotificationDetails { DateCreated=DateTime.Now, DateSent=DateTime.Now, TemplateUrl="www.baidu.com", Model= testEntity });                     
    }

Класс NotificationDetails:

public class NotificationDetails
{
    [JsonProperty(PropertyName = "id")]
    public string NotificationID { get; set; }
    public DateTime? DateCreated { get; set; }
    public DateTime? DateSent { get; set; }
    public string TemplateUrl { get; set; }
    public dynamic Model { get; set; }
}

Класс TestEntity, который действует как вложенный объект:

class TestEntity
{

    public ObjectId _id { get; set; }

    public string name { get; set; }

    public double x { get; set; }

    public double y { get; set; }

    public double z { get; set; }

    public dynamic dynam { get; set; }
}

Снимок экранарезультата:

enter image description here

Если ошибка все-таки произошла, лучше поделитесь с нами своим более подробным кодом для дальнейшего исследования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...