当前位置:编程学习 > C#/ASP.NET >>

Mongodb NOSql 数据库问题,是否可以插入带接口的类

例如

    public class LogInfo
    {
        public ObjectId _id;

        /// <summary>
        /// 日志Id  这里的特性 可以在帮助类中识别出
        /// </summary>
        //[MongoDBFieldAttribute(true, Unique = true)]
        public int LogId { get; set; }

        /// <summary>
        /// 日志的内容
        /// </summary>
        public string Content { get; set; }

        /// <summary>
        /// 日志的创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 显示方式
        /// </summary>
        public IDisplay Display { get; set; }
    }

IDisplay 是日志内容的字符串的现实方式 
例如

public interface IDisplay
{
       string show(string msg);
}

public class NormalDisplay:IDisplay
{
      public string show(string msg)
      {
          return "Normal"+msg;
      }
}


请问mongoDB这种对象数据nosql可以直接保存这种对象class么。。





--------------------编程问答-------------------- 请问mongoDB这种对象数据nosql可以直接保存这种对象class么。。楼主详解一下

--------------------编程问答--------------------
引用 1 楼 liliu0401 的回复:
请问mongoDB这种对象数据nosql可以直接保存这种对象class么。。楼主详解一下



你可以尝试下NDatabase ,这个nosql的确可以这么做,但是我发现他有些问题
所以尝试使用mongodb --------------------编程问答-------------------- 跟接口没有关系,只要是对象(创建时不会出错)就可以保存。 --------------------编程问答-------------------- 在保存 LogInfo 类型对象时,主要是看属性 Display 所引用的对象是否可以序列化到bson格式,而根本不管它的接口。因此“保存”应该是没有问题的。

例如你的 NormalDisplay 类型中如果有一个属性 string ABC{get;set;},那么保存这个 LogInfo 对象时如果 Display 属性引用了一个 NormalDisplay,就会保存为  "Display":{"ABC":"234234"}。而跟Display是什么类型、实现了什么接口无关。

可是你的 NormalDisplay 类并未实现任何字段或者属性,没有任何东西要保存到数据库!

保存虽然可以,但是反序列未必能成功。因为你的定义,是无法直接创建对象的。因此你只能自己使用 Bson 的相关方式访问(例如) obj.GetElement("Display"]) 属性,或者单独自己写代码把这个属性反序列化为 NormalDisplay 类型对象。而直接反序列化 logInfo 对象则可能出错。 --------------------编程问答--------------------
引用 4 楼 sp1234 的回复:
在保存 LogInfo 类型对象时,主要是看属性 Display 所引用的对象是否可以序列化到bson格式,而根本不管它的接口。因此“保存”应该是没有问题的。

例如你的 NormalDisplay 类型中如果有一个属性 string ABC{get;set;},那么保存这个 LogInfo 对象时如果 Display 属性引用了一个 NormalDisplay,就会保存为  "Display":{"ABC":"234234"}。而跟Display是什么类型、实现了什么接口无关。

可是你的 NormalDisplay 类并未实现任何字段或者属性,没有任何东西要保存到数据库!

保存虽然可以,但是反序列未必能成功。因为你的定义,是无法直接创建对象的。因此你只能自己使用 Bson 的相关方式访问(例如) obj.GetElement("Display"]) 属性,或者单独自己写代码把这个属性反序列化为 NormalDisplay 类型对象。而直接反序列化 logInfo 对象则可能出错。




的确是这样,可以保存,在反序列的时候出的问题,高手啊呵呵

高手有没有处理这些问题的例子
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,