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 inte易做图ce IDisplay
{
string show(string msg);
}
public class NormalDisplay:IDisplay
{
public string show(string msg)
{
return "Normal"+msg;
}
}
请问mongoDB这种对象数据nosql可以直接保存这种对象class么。。
--------------------编程问答-------------------- 请问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 对象则可能出错。 --------------------编程问答--------------------
的确是这样,可以保存,在反序列的时候出的问题,高手啊呵呵
高手有没有处理这些问题的例子
补充:.NET技术 , C#