2017-02-18 1 views
1

Я только что открыл Мартен сегодня и в настоящее время пытается узнать, как правильно его использовать.Правильный способ использования Marten для ASP.NET MVC/Core

Для создания новых записей, это может быть как прямым, как предоставление пустой формы/вида, то во время представления - просто открыть новый сеанс затем выполнить сохранение, как это:

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

Но как насчет обновления существующие записи? После того, как вы взяли запись и отобразили ее в форме, хорошо ли использовать тот же код, что и я, или есть другой способ? Единственный пример, который я нашел для обновления, - это загрузить запись из сеанса, вызвав метод Load(), а затем отредактировав свойства, после чего вызывается метод SaveChanges() используемого сеанса.

ответ

2

Мартен отслеживает документы, используя document identity. Идентификатор может быть либо публичным полем, либо свойством, а имя должно быть либо id, либо Id или ID.

Цитата из doc:

.Net API Мартена не делает никаких различий между вставками и обновлениями. Функции Postgresql, созданные Мартеном для обновления документа Столы для хранения данных выполняют для вас «upserts». В любое время, когда документ зарегистрирован через IDocumentSession.Store (документ), Marten запускает политику «автоматического присвоения» для типа идентификатора этого документа. См. Идентификатор документа для получения дополнительной информации о идентификаторах документа.

Это означает, что вам необязательно загружать документ перед его обновлением. Если вы знаете его идентификационное значение, вы можете просто изменить какое-либо свойство в документе и вызвать IDocumentSession.Store(document), который будет выполнять обновление, если документ с этим идентификатором уже существует в хранилище данных.

+0

Я вижу. Я прочитал, что у него есть грязная система отслеживания для загруженных записей, но передача всей модели с помощью тех же методов «Store()» и «SaveChanges()», эта функция все равно будет работать? Я считаю, что перезапись всего поля JSONB стоит дорого, чем обновление только грязных полей. Благодаря! – eSPiYa

Смежные вопросы