1

我今天刚刚发现了 Marten,目前正在尝试学习如何正确使用它。

对于创建新记录,它可以像提供空白表单/视图然后在提交期间一样直接 - 只需打开一个新会话然后执行如下保存:

using (var session = _documentStore.LightweightSession())
        {
            session.Store(model);
            session.SaveChanges();                
        }

但是如何更新现有记录呢?在获取记录并将其显示在表单上之后,是否可以使用与我上面使用的相同的代码,还是有其他方法?我发现的唯一更新示例是通过调用 Load() 方法从会话加载记录,然后编辑属性,然后调用所用会话的 SaveChanges() 方法。

4

1 回答 1

2

Marten 使用document identity. Id 可以是公共字段或属性,名称必须是idorIdID

引用自doc

Marten 的 .Net API 不区分插入和更新。Marten 生成的用于更新文档存储表的 Postgresql 函数为您执行“更新插入”。每当通过 IDocumentSession.Store(document) 注册文档时,Marten 都会针对该文档的 id 类型运行“自动分配”策略。有关文档 ID 的更多信息,请参阅文档身份。

这意味着您不一定需要在更新文档之前加载它。如果您知道它的身份值,您可以简单地更改文档上的某些属性并调用IDocumentSession.Store(document)它将执行更新,如果具有此 id 的文档已经存在于数据存储中。

于 2017-02-18T15:43:37.697 回答