在C#MongoDB中实现一对多的关系,了解多方

时间:2015-10-13 08:56:39

标签: c# mongodb mapping one-to-many bson

所有

在我们的应用程序中,有一个Log Model类和一个LogEvent Model Class。 日志模型类(一对多关系)LogEvent模型类。

这是Log Model Class(一面)

    public class ELLCsLog : ELLCsInterfaceLog
    {

         public Object Id { get; set; }
         public int UserID { get; set; }

         public DateTime DateTimeOfInterest { get; set; }
         public String DutyCycleCode { get; set; }
         public IList<Object> logEventsIdList { get; set; }
    } // end of public class ELLCsLog

这是LogEvent模型类(多面)

public class ELLCsLogEvent : ELLCsInterfaceLogEvent
{
    public Object Id { get; set; }
    public Object UmbrellaLogId { get; set; }
    public Double StartTime { get; set; }
    public Double EndTime { get; set; }
    public Double Duration { get; set; }
    public int isSubmitted { get; set; }
    public int isFrozen { get; set; }
    public String Remarks { get; set; }
    public String Location { get; set; }
    public String StatusCode { get; set; }
}

在我的代码中,我在将对象插入MongoDB数据库之前创建了我的对象的BsonDocument版本。

1-)给定一个代表父LogId的UmbrellaLogId,下面的代码将一个LogEvent实例插入到MongoDB数据库中。

2-)下一步涉及检索我刚刚插入的同一个LogEvent实例,这样我就可以得到MongoDB生成的LogEvent的Id。 (我知道它效率低下,但我现在正试图让代码工作)

3-)我还检索父日志(即使用UmbrellaLogId的日志),以便我可以将LogEvent的Id添加到IList logEventsIdList集合。

4-)?这里是我真正迷失的地方,我不知道如何将LogEvent的Id添加到IList logEventsIdList中?我必须使用BsonDocument吗?我们该怎么做呢?

               MongoDB.Bson.ObjectId  UmbrellaLogIdAsObjectId = (ObjectId)UmbrellaLogId;
                BsonDocument logEventBsonDoc = new BsonDocument { 
                                         {"UmbrellaLogId",    (BsonValue)UmbrellaLogIdAsObjectId}
                                        , {"StartTime", StartTime}
                                        , {"EndTime", EndTime}
                                        , {"Duration", Duration}
                                        , { "isSubmitted", isSubmitted}
                                        , { "isFrozen", isFrozen}
                                        , { "Remarks", Remarks }
                                        , { "Location", Location}
                                        , { "StatusCode", StatusCode }
                                     }; // end of new BsonDocument
                objUtility = new Utility();
                objUtility.Insert(logEventBsonDoc,     "FMS_TM_MST_LogEvents");

                string[] arrFields = {"Id",
                                         "UmbrellaLogId", 
                                           "StartTime", 
                                               "EndTime",
                                                 "Duration",
                                                   "isSubmitted",
                                                     "isFrozen",
                                                      "Remarks",
                                                        "Location",
                                                         "StatusCode" };
                IMongoQuery query = Query.EQ("UmbrellaLogId",    (BsonValue)UmbrellaLogIdAsObjectId);
                aLogEvent = DBConnection.database.GetCollection<ELLCsLogEvent>("FMS_TM_MST_LogEvents")
                                          .Find(query).SetFields(arrFields).ToList<ELLCsInterfaceLogEvent>().FirstOrDefault();

               IMongoQuery queryForLogOfInterest = Query.EQ("Id", (BsonValue)UmbrellaLogIdAsObjectId);
              ELLCsInterfaceLog aLog = DBConnection.database.GetCollection<ELLCsLog>("FMS_TM_MST_Logs")
                                                    .Find(queryForLogOfInterest).SetFields(arrFields).ToList<ELLCsInterfaceLog>().FirstOrDefault();

?这是我真正迷失的地方,我不知道如何将LogEvent的Id添加到IList logEventsIdList?我必须使用BsonDocument吗?我们该怎么做呢?

1 个答案:

答案 0 :(得分:0)

所有

以下是使单方实体了解多方实体的代码:

          DBConnection.database.GetCollection<Log>("Logs").Update(
                                     Query<Log>.EQ(l => l.Id, UmbrellaLogIdAsObjectId),
                                     Update<Log>.Push(l => l.logEventsIdList, aLogEvent.Id),
                                                         new MongoUpdateOptions
                                                         {
                                                             WriteConcern = WriteConcern.Acknowledged
                                                         });