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

时间:2013-04-23 16:44:40

标签: ravendb

我最近升级到了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中持久存在,但派生属性(Name,LogicalOrder)不是。

为什么只在RavenDB中保存基类属性?

1 个答案:

答案 0 :(得分:2)

知道了。通过反复试验,我注意到一个派生属性被保存(与我的问题中显示的类别不同),并且该属性使用[DataMember]属性进行了修饰。我刚刚添加它,因为我正在为我的应用程序创建一个WCF服务,我开始在一个属性上使用该属性进行测试。

正如Ayende所说here,你必须对所有属性使用[DataMember],或者对所有属性都不使用[DataMember]。如果属性中存在[DataMember],则将忽略所有其他属性。

注意:即使在其他类中的属性上指定了[DataMember],这对我来说也是一个问题。好像我在任何地方都使用{{1}},我必须将它用于所有事情。