RavenDB SaveChanges()不保存派生类的属性([DataMember]在其他类中使用)
我最近升级到了2230,一切正常。但是,我刚刚更新了RavenDB.NET客户端程序集,现在我遇到了这个问题 这一准则已经实施了一年左右。这就是我储蓄的方式:RavenDB SaveChanges()不保存派生类的属性([DataMember]在其他类中使用),ravendb,Ravendb,我最近升级到了2230,一切正常。但是,我刚刚更新了RavenDB.NET客户端程序集,现在我遇到了这个问题 这一准则已经实施了一年左右。这就是我储蓄的方式: public void Save(EntityBase objectToSave) { using (IDocumentSession session = GetOptimisticSession()) { session.Store(objectToSave, objectToSave.Etag);
public void Save(EntityBase objectToSave)
{
using (IDocumentSession session = GetOptimisticSession())
{
session.Store(objectToSave, objectToSave.Etag);
session.SaveChanges();
}
}
这就是我正在保存的对象
public class InstallationEnvironment : EntityBase
{
public string Name { get; set; }
public int LogicalOrder { get; set; }
}
现在,基类:
public class EntityBase : NotifyPropertyChangedBase
{
public string Id { get; set; } // Required field for all objects with RavenDB.
}
问题是基类属性(Id)在RavenDB中得到了持久化,而派生属性(名称、逻辑顺序)却没有
为什么RavenDB中只保存基类属性?明白了。通过反复试验,我注意到保存了一个派生属性(与我的问题中显示的不同的类上),并且该属性用
[DataMember]
属性修饰。我最近刚刚添加了它,因为我正在为我的应用程序创建一个WCF服务,我开始在一个属性上使用该属性进行测试
正如Ayende所说,您必须在所有属性上使用[DataMember]
,或者不在任何属性上使用。如果属性上存在[DataMember]
,则将忽略所有其他属性
注意:这对我来说是个问题,即使在不同类的属性上指定了
[DataMember]
。似乎如果我在任何地方使用[DataMember]
,我就必须在任何事情上都使用它。你是说2330
哪一个是最新的?客户端和服务器都在保存版本上吗?知道RavenDB为什么会这样工作吗?这是一个棘手的问题。RavenDB使用Newtonsoft JSON.Net库进行序列化。你可以。基本上,它尊重来自.net的,它与一起使用-两者最初都是为WCF中的XML序列化而设计的。但是,如果您仍然使用它们,它们的行为将延续到JSON.Net中。顺便说一句,这是在任何东西上使用这些属性时的默认和预期行为。您可以在这些MSDN链接的备注部分阅读更多内容。谢谢,@MattJohnson。如果您希望跨线路发送属性(需要该属性),但不希望将其持久化到RavenDB中,该怎么办?这是使用JsonIgnore属性的时候吗?是的,这是一种方法。确保从Raven.Imports.Newtonsoft.Json
命名空间导入。与数据传输相比,更好的方法是使用单独的对象进行存储,例如通常称为DTO(数据传输对象)