RavenDB:将自动增量添加到ID以外的其他属性

时间:2012-09-28 10:08:57

标签: ravendb auto-increment

有没有办法在属性上放置一个属性来告诉RavenDB像ID属性一样使用这个属性并在其上放一个自动增量?

的伪代码:

public class MyObj {
    public string Id { get; set; }
    [Increment]
    public int OtherProp { get; set; }
}

2 个答案:

答案 0 :(得分:4)

Dynamicus points to the correct solution,但我想提供准确的示例代码,以帮助其他Stackoverflow用户,也可能使解决方案更易于搜索。

关于问题的示例代码,这是解决方案:

public class OtherPropIncrementListener : IDocumentStoreListener
{
    HiLoKeyGenerator _generator;
    IDocumentStore _store;

    public OtherPropIncrementListener(IDocumentStore store)
    {
        this._store = store;
        _generator = new HiLoKeyGenerator(store.DatabaseCommands, "MyObjs", 1);
    }

    public void AfterStore(string key, object entityInstance, RavenJObject metadata)
    {
    }

    public bool BeforeStore(string key, object entityInstance, RavenJObject metadata, RavenJObject original)
    {
        var myObj = entityInstance as MyObj;
        if(myObj != null && myObj.OtherProp == 0)
        {
            string documentKey = _generator.GenerateDocumentKey(_store.Conventions, entityInstance);
            myObj.OtherProp = int.Parse(documentKey.Substring(documentKey.IndexOf("/") + 1));
            return true;
        }

        return false;
    }
}

然后在初始化DocumentStore之后,您添加此代码以使上述监听器工作:

documentStore.RegisterListener(new OtherPropIncrementListener(documentStore));

答案 1 :(得分:0)

您可以在RavenDB google群组中找到答案。 https://groups.google.com/forum/#!msg/ravendb/70xaVjoMidU/ssDs4mbKoxQJ