1
我有套实体的所有的人都从抽象类派生自定义密钥生成在RavenDB
public abstract class NamedEntity : INamedEntity
{
#region Public Properties
public string Description { get; set; }
public string Id { get; set; }
public string Name { get; set; }
#endregion
}
当我坚持我想用Name
领域作为重点的所有实体,所以我重写DocumentKeyGenerator
和提供这样的执行:
store.Conventions.DocumentKeyGenerator = entity =>
{
var namedEntity = entity as NamedEntity;
if (namedEntity != null)
{
return string.Format("{0}/{1}", store.Conventions.GetTypeTagName(entity.GetType()), namedEntity.Name);
}
return string.Format("{0}/", store.Conventions.GetTypeTagName(entity.GetType()));
};
它正常工作时,我坚持在第一时间实体的名单,但如果我想再次坚持他们,我得到一个异常
PUT attempted on document 'xxxxx' using a non current etag
我刚开始使用RavenDB,所以我不明白我做错了什么?
时,所有更改都会自动保留,因此如果我从外部源获取实体集并只想刷新持久化实体,我是否应该迭代所有这些,重新分配它们的值然后SaveChanges?另外,如果我让RavenDB为我的实体生成唯一的密钥,我的代码工作得很好,我可以重复这种行为来生成我自己的密钥吗?有什么区别? –
你的确可以做到这一点。如果您有很多文档需要一次更改,则可能需要调查修补API。 http://ravendb.net/docs/client-api/partial-document-updates –
如果你让乌鸦生成独特的ID,并且你存储了一个新的实体,它可能不会抛出你所看到的异常,但你实际上正在存储一个新文件,而不是更新现有文件。完成后会有两个。 –