RavenDB SaveChanges()不保存派生类的属性([DataMember]在其他类中使用)

RavenDB SaveChanges()不保存派生类的属性([DataMember]在其他类中使用),ravendb,Ravendb,我最近升级到了2230,一切正常。但是,我刚刚更新了RavenDB.NET客户端程序集,现在我遇到了这个问题 这一准则已经实施了一年左右。这就是我储蓄的方式: public void Save(EntityBase objectToSave) { using (IDocumentSession session = GetOptimisticSession()) { session.Store(objectToSave, objectToSave.Etag);

我最近升级到了2230,一切正常。但是,我刚刚更新了RavenDB.NET客户端程序集,现在我遇到了这个问题

这一准则已经实施了一年左右。这就是我储蓄的方式:

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(数据传输对象)