Raven DB - 让其自动生成键值

5

我目前有一个对象,它拥有一个名为Id的公共属性。当我存储该对象时,我希望Id成为数据的一部分,而不是像现在一样成为文档Id。创建文档存储时,我只设置了连接字符串。

using (var session = documentStore.OpenSession())
{
    session.Store(a);
    session.SaveChanges();
}


a can be thought of an object as:
public class A
{
    public Guid Id { get; set; }
    //other properties
}

要么我希望它生成一个随机Id,要么将数据和文档Id都作为A类的Id属性。

编辑:

有两种可能: 1. 文档ID = ID

Data Section contains:
{
    data //sorry if the notation is not correct, doing it off of memory
    {
        Id: [my guid] 
        //other properities
    }
}

或者数据包含由Raven随机生成的ID和文档ID


1
我不明白你在这里尝试做什么。ID应该长什么样?文档应该长什么样? - Ayende Rahien
1个回答

8

如果您想自己控制Id属性并让Raven使用另一个属性作为文档的ID,可以使用此选项:

public class User
{
    public string DocumentId { get; set; }
    public Guid Id { get; set; }
    public string Name { get; set; }

    public User()
    {
        Id = Guid.NewGuid();
    }
}

documentStore.Conventions.FindIdentityProperty = prop =>
{
    if (prop.DeclaringType == typeof(User))
        return prop.Name == "DocumentId";

    return prop.Name == "Id";
};

这个方法是否也会将名称属性保存在文档的数据部分中? - Brad Semrad
当然可以。Brad,如果你有 nuget 的话,尝试这样的事情非常容易。 - Daniel Lang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接