0

我正在尝试将用户代码脚本保存在 RavenDB 中,到目前为止几乎一切正常。我从一个单独的进程中获得了一个脚本,我能够加载脚本、对其进行编辑并将其保存回数据库。

当我创建一个新脚本并尝试将其插入数据库时​​,问题就来了。我使用下面的代码。

public static void AddUserScript(UserScripts entity, string RavendbUrl, int userid)
{
    try
    {
    IvcRavenDB raven = new IvcRavenDB();
    var store = raven.InitRavenDB(RavendbUrl, "UserScripts");

    entity.Updated = DateTime.Now.ToString();
    entity.Created = DateTime.Now.ToString();
    entity.ScriptFileLength = entity.Script.Length;
    entity.userid = userid;

    using (var session = store.OpenSession())
    {
        session.Store(entity); // DIES HERE
        session.SaveChanges();
    }
    }
    catch (Exception ex)
    {
    var mess = ex.Message;
    }
}

当我说dies时,下一行没有执行,没有异常,而且我在任何地方都看不到错误,这很奇怪。几乎完全相同的代码可以使用 Id 保存实体,唯一的区别是添加时的 Id 字段为 null

我在 Net Core 2.0 中使用 RavenDB 4 和 Raven Client 4.02。

我对 Raven 很陌生,甚至不知道从哪里开始解决这个问题而没有错误,所以任何帮助都会很棒。

4

1 回答 1

0

无论出于何种原因,将 Id 保留为空都会导致问题,它可能是客户端的版本,我不确定。但是,我发现了两个文档,它们描述了生成 Id 的几种方法,并且它们都可以始终如一地工作。

4种方法获取ID

  1. 语义 ID 此 ID 是通过在文档 ID 中输入实际字符串生成的。即“用户/ayende@hr.com”

  2. 服务器端 ID 此 ID 是通过在文档 ID 中输入:“users/”生成的。

  3. 身份 此 ID 是通过输入:“users|”生成的 在文档 ID 中。

  4. GUID 此 ID 是通过将文档 ID 字段留空而生成的

更多信息可以在这里找到:文档标识符生成

于 2018-04-06T17:34:01.330 回答