Обновление: я исправил это, скопировав рабочий код в новый чистый проект.Я понятия не имею, почему я получил эту ошибку, но пока она исчезла
У меня проблемы с определением, как именно делать то, что я хочу.В этом случае у меня есть база данных торговцев, и я хочу иметь возможность добавлять места в качестве списка к записи продавца в базе данных.По какой-то причине я не могу понять, почему, я могу получить торговца, но, кажется, не могу получить идентификатор записи, которую я выбрал, и затем обновить ее.(У меня также есть некоторые проблемы с обновлением, из того, что я видел, мне нужен идентификатор записи, которую я хочу, и затем я могу обновить с патчем ... верно?)
Вотмой класс Json:
public class Merchant
{
[JsonProperty(PropertyName = "name")]
public string name { get; set; }
[JsonProperty(PropertyName = "venues")]
public List<Venue> venues { get; set; }
}
public class Venue
{
[JsonProperty(PropertyName = "name")]
public string name { get; set; }
[JsonProperty(PropertyName = "tills")]
public List<Till> tills { get; set; }
}
public class Till
{
[JsonProperty(PropertyName = "name")]
public string name { get; set; }
}
Вот функции моего класса RavenDB Handler, которые являются подходящими:
public List<JObject> QueryFromDb(string query)
{
List<Object> objReturned;
List<JObject> jObjects = new List<JObject>();
using (IDocumentSession session = store.OpenSession())
{
objReturned = session
.Advanced.RawQuery<Object>(query)
.ToList();
}
for (var i = 0; i < objReturned.Count; i++)
{
var json = JsonConvert.SerializeObject(objReturned[i], Formatting.Indented);
jObjects.Add(JObject.Parse( json.ToString()));
}
return jObjects;
}
public String GetJsonFromDB(string query)
{
string returnStr = "";
List<JObject> myResponse = QueryFromDb(query);
for (var i = 0; i < myResponse.Count; i++)
{
var json = JsonConvert.SerializeObject(myResponse[i], Formatting.Indented);
returnStr += json.ToString();
}
return returnStr;
}
А вот я пытаюсь получить Id записи ravendb:
public void UpdateMerchantList()
{
merchantGrid.Rows.Clear();
List<JObject> myResponse = ravenDB.QueryFromDb("from Merchants");
for (var i = 0; i < myResponse.Count; i++)
{
var json = JsonConvert.SerializeObject(myResponse[i], Formatting.Indented);
Merchant merchant = new Merchant(json.ToString());
if (myResponse[i].Property("Id") != null) { merchant.MyID = myResponse[i].Property("Id").ToString(); }
merchantGrid.Rows.Add(merchant.MyID, merchant.name);
}
}
По какой-то причине я взял этот код и перенес его в консольное приложение и заставил работать с этим кодом:
List<JObject> result = ravenDb.QueryFromDb("from Merchants");
for(var i = 0; i < result.Count; i++)
{
Console.WriteLine(result[i].Property("Id").ToString());
}
Что дает мне именно то, что я хочу: "Id": "merchants / 97-A" "Id": "merchants / 98-A" "Id": "merchants / 129-A" "Id": "merchants / 130-A"
Но когда я перевожу его обратно в форму и пытаюсь добавить его в таблицу данных, я больше не вижу его.
update: мне удалось добавить в список класс продавца в консольном приложении.Вот код.
public void AddVenue(string idArg,Venue venue)
{
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();
}
}
Чтобы люди поняли, о чем я говорю: вот json, который выводится из приложения формы: ![No metadata, no id](https://i.stack.imgur.com/PK9Ck.png)
Почему?
когда в консоли с почти идентичным кодом (копия вставлена) я получаю это: ![See how much better this looks?](https://i.stack.imgur.com/zO1tY.png)
Я получаю больше данных из одного приложения, чемдругой, и я действительно очень хочу идентификатор.
Я собираюсь реорганизовать код в приложение wcf, я думаю.Просто так.Может быть, я случайно исправлю это.