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

RavenDB SaveChanges() not saving properties on derived class ([DataMember] used in other class)

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

此代码已经使用了一年左右。这就是我保存的方式:

1
2
3
4
5
6
7
8
public void Save(EntityBase objectToSave)
{
    using (IDocumentSession session = GetOptimisticSession())
    {
        session.Store(objectToSave, objectToSave.Etag);
        session.SaveChanges();
    }
}

这就是我要保存的对象。

1
2
3
4
5
public class InstallationEnvironment : EntityBase
{
    public string Name { get; set; }
    public int LogicalOrder { get; set; }
}

现在是基类:

1
2
3
4
public class EntityBase : NotifyPropertyChangedBase
{
    public string Id { get; set; }  // Required field for all objects with RavenDB.
}

问题是基类属性 (Id) 在 RavenDB 中得到持久化,但派生属性 (Name, LogicalOrder) 没有。

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


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

正如 Ayende 在这里所说,您必须在所有属性上使用 [DataMember],或者不使用任何属性。如果属性上存在 [DataMember],则所有其他属性都将被忽略。

注意:这对我来说是个问题,即使 [DataMember] 是在不同类的属性上指定的。似乎如果我在任何地方使用 [DataMember],我必须将它用于所有事情。