Я пытаюсь выполнить команду исправления в Ravendb c # и получаю эту ошибку.Я собираюсь создать новую запись, а затем попытаться сохранить ее.
Вот подходящие классы для обработки сериализации, десериализации json.
public class Merchant
{
[JsonProperty(PropertyName ="Id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string name { get; set; }
[JsonProperty(PropertyName = "venues")]
public System.Collections.Generic.List<Venue> venues { get; set; }
[JsonProperty(PropertyName ="files")]
public System.Collections.Generic.List<File> files { get; set; }
}
public class Venue
{
[JsonProperty(PropertyName = "Id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string name { get; set; }
[JsonProperty(PropertyName = "tills")]
public List<Till> tills { get; set; }
[JsonProperty(PropertyName = "files")]
public System.Collections.Generic.List<File> files { get; set; }
}
public class Till
{
[JsonProperty(PropertyName = "Id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string name { get; set; }
[JsonProperty(PropertyName = "files")]
public System.Collections.Generic.List<File> files { get; set; }
[JsonProperty(PropertyName = "logs")]
public List<Log> logs { get; set; }
}
// вот функция, котораяСначала вызывается.
public bool AddMerchant(Merchant m)
{
bool returnbool = false; // set to false at begining.
if (DoesServiceExist("RavenDB"))
{
StartService("RavenDB");
returnbool = true;
using (IDocumentSession session = store.OpenSession())
{
session.Store(m);
session.SaveChanges();
}
}
return returnbool;
}
Здесь начинается моя проблема, я вызываю эту функцию, и она говорит мне, что я не могу выполнить это действие из-за того, что оно содержится в отложенном операторе исправления.
public void AddVenue(string idArg, Venue venue = null)
{
using (IDocumentSession session = store.OpenSession())
{
var merchant = session.Load<Merchant>(idArg);
List<Venue> venuesList = new List<Venue>();
if (merchant.venues == null) { session.Advanced.Patch(merchant, m => m.venues, venuesList); }
else
{
session.Advanced.Patch(merchant,
x => x.venues,
venues => venues.Add(venue));
}
session.SaveChanges();
}
}
После исследования я полагал, что Отложенный в Равендбе ссылался на это:
session.advanced().defer(new PatchCommandData("blogposts/1", null, patchRequest, null));
Который я никогда не называю.
Любая помощь будет приветствоваться.
// finalОтвет ниже, спасибо.
public void AddVenue(Merchant merchant, Venue venue = null)
{
using (IDocumentSession session = store.OpenSession())
{
Merchant merchantLocal = session.Load<Merchant>(merchant.Id);
var changeVector = session.Advanced.GetChangeVectorFor(merchantLocal);
if(merchantLocal.venues == null) { merchantLocal.venues = new List<Venue>(); }
merchantLocal.venues.Add(venue);
session.Store(merchantLocal, changeVector, merchantLocal.Id);
session.SaveChanges();
}
}