Привязка сущностей Mongo DB в C # - PullRequest
0 голосов
/ 29 мая 2018

У меня есть следующий формат документа в MongoDB

Документ 1:

{
    "_id" : ObjectId("5b0d30ae942267c0c8f6229d"),
    "Expression" : "[tag] = 'Druck1' && [status]='OK'",
    "Name" : "Druck1 is running",
    "Actions" : [ 
        {
            "TemplateName" : "Warning",
            "Tags" : "[tag]",
            "Roles" : [ 
                "Group_AdUser", 
                "Group_FieldServiceCoordinator", 
                "Group_FieldServiceTechnician", 
                "Group_Roaster", 
                "Group_ServiceAdmin", 
                "Group_ServiceManager", 
                "Group_ServiceSales", 
                "Group_TSCUser", 
                "Group_WorkshopRepairCoordinator"
            ],
            "IsActive" : true,
            "SequenceNo" : 0,
            "Type" : "EventMessageAction"
        }
    ],
    "IsActive" : true,
    "TargetUsers" : null,
    "TargetGroups" : null,
    "Type" : "Rule"
}

Документ 2:

{
    "_id" : ObjectId("5b0bc01fcd8d2966e0fdf2f2"),
    "Expression" : "HasProperty('category') && [category] = 'Temperature'",
    "Name" : "RTF Machine Temperature (History Data)",
    "Actions" : [ 
        {
            "Table" : "[machinename]",
            "Key" : "'RTF'",
            "Value" : "[value]",
            "Timestamp" : "[timestamp]",
            "ExpirationDate" : "[timestamp]",
            "Icon" : "''",
            "Color" : "''",
            "Text" : "''",
            "Category" : "[category]",
            "IsActive" : true,
            "Type" : "HistoryDataAction",
            "SequenceNo" : 0
        }
    ],
    "IsActive" : true,
    "TargetUsers" : null,
    "TargetGroups" : null,
    "Type" : "Rule"
}

Есть ли способ, я могу получитьвыше запись о моих сущностях, как показано ниже:

Правило Entity:

[DataContract]
public abstract class Rule
    {
        [DataMember]
        public string Expression { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public IEnumerable<Action> Actions { get; set; }

        [DataMember]
        public bool IsActive { get; set; }
    }

Действие Entity:

public class Action
    {
    }

History Действие Entity:

 [DataContract]

public class HistoryDataAction : Action
    {
        public HistoryDataAction()
        {
        }


        [DataMember]
        [JsonProperty("table")]
        public string TableExpression { get; set; }

        [DataMember]
        [JsonProperty("key")]
        public string KeyExpression { get; set; }

        [DataMember]
        [JsonProperty("value")]
        public string ValueExpression { get; set; }

        [DataMember]
        [JsonProperty("timestamp")]
        public string TimestampExpression { get; set; }

        [DataMember]
        [JsonProperty("expiration_date")]
        public string ExpirationDateExpression { get; set; }

        [DataMember]
        [JsonProperty("icon")]
        public string IconExpression { get; set; }

        [DataMember]
        [JsonProperty("color")]
        public string ColorExpression { get; set; }

        [DataMember]
        [JsonProperty("text")]
        public string TextExpression { get; set; }

        [DataMember]
        [JsonProperty("category")]
        public string CategoryExpression { get; set; }

        [DataMember]
        [JsonProperty("is_active")]
        public bool IsActive { get; set; }

        [DataMember]
        [JsonProperty("type")]
        public virtual string Type
        {
            get { return this.GetType().Name; }
        }

        [DataMember]
        [JsonProperty("sequence_no")]
        public int SequenceNo { get; set; }
    }

Event Action Data:

[DataContract]
    public class EventMessageAction : Action
    {
        public EventMessageAction()
        {
        }

        [DataMember]
        public string TemplateName { get; set; }

        [DataMember]
        public string Tags { get; set; }

        [DataMember]
        public List<string> Roles { get; set; }

        [DataMember]
        public bool IsActive { get; set; }

        [DataMember]
        public int SequenceNo { get; set; }

        [DataMember]
        public virtual string Type { get; set; }
    }

Есть ли что-то вроде TypeNameHandling, которого мы достигаем с помощью $ type, доступного для MongoDB.Мне нужно получить список документов и сопоставить его с моей сущностью.Если типом действия является HistoryDataAction, то он должен перейти к объекту HistoryDataAction, в противном случае для объекта EventMessageAction.

Обычная коллекция. Функция Find () здесь не работает.Он успешно дает мне сущность Rule, но не связывает сущность Action.

1 Ответ

0 голосов
/ 29 мая 2018

Украсьте свой базовый тип (действие) с атрибутом BsonKnownTypes.Например:

[BsonKnownTypes(typeof(EventMessageAction),
    typeof(HistoryDataAction))]
public class Action
{
}

[Обновить] Ваши данные не содержат ключ типа, требуемый водителю, чтобы знать, к какому типу сопоставлять данные.Если возможно, переименуйте или продублируйте вашу клавишу «Type» на «_t»

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