У меня есть некоторые проблемы. Я не уверен, что это с данными или с вороной. Я использую Raven в Unity3d. Я работал в течение недели или двух с поддержкой, пытаясь все расставить по местам, они даже внедрили некоторые патчи, чтобы это работало. Сейчас я действительно близко, но продолжаю сталкиваться с ошибкой «System.InvalidOperationException: не удалось преобразовать документ System.FormatException: входная строка была в неправильном формате». Данные в БД в настоящее время взяты из дампа данных из версии 3.x, поэтому я не уверен, были ли какие-либо различия в структуре или что-либо, что я не учел, но я использовал встроенный импортер, и он Насколько я могу судить, данные были приняты очень хорошо и не дали никаких других ошибок или указаний на то, что это проблема с этим.
Я сделаю все возможное, чтобы объяснить и показать код, если у кого-то есть предложения, я был бы очень признателен. Одна проблема, с которой я столкнулся в начале, это то, что я использую игровую платформу, которая была первоначально сделана несколько лет назад и которую я обновил. Он использовал Raven 3.x, а при попытке обновить его до 4.x были обнаружены проблемы с совместимостью, потому что Unity еще не реализовал .netstandard 2.0. С выпуском Unity 2018.1 на прошлой неделе в RC1 появилась поддержка .netstandard, так что я наконец смог получить связь между Unity и Raven.
На данный момент игра пытается запросить у БД информацию о NPC и предметах для хранения в кеше.
Ниже приведен исходный запрос с момента, когда он использовал Raven 3.x (строка n => n.ZoneId == this.id сравнивает присвоенный идентификатор ZoneId NPC с идентификатором ZoneId сценария, который вызывает данные Ничто на самом деле не относится к идентификатору документа, который я нашел)
using (var session = this.world.WorldDatabase.OpenSession())
{
// load all npcs
foreach (var npcData in session.Query<NpcData>("Npc/ByZoneId").Where(n => n.ZoneId == this.id))
{
var npc = new Npc(this, npcData.Guid, npcData.GroupId, (NpcType) npcData.NpcType, npcData);
this.objectCache.AddItem(npc);
var position = npcData.Position.ToVector();
position.Y = this.GetHeight(position.X, position.Z);
var rotation = Quaternion.CreateEular(0, npcData.Orientation, 0);
this.PrimaryFiber.Enqueue(() => npc.Spawn(position, rotation));
}
Я не был уверен, что это не понравилось, поэтому я попытался следовать документации, как показано ниже.
IList<NpcData> query = session
.Query<NpcData>("Npc/ByZoneId")
.Where(n => n.ZoneId == zid)
.ToList();
foreach (var npcData in query)
{
var npc = new Npc(this, npcData.Guid, npcData.GroupId, (NpcType) npcData.NpcType, npcData);
this.objectCache.AddItem(npc);
var position = npcData.Position.ToVector();
position.Y = this.GetHeight(position.X, position.Z);
var rotation = Quaternion.CreateEular(0, npcData.Orientation, 0);
this.PrimaryFiber.Enqueue(() => npc.Spawn(position, rotation));
}
У меня есть настройка интерфейса с этим:
IRavenQueryable<T> Query<T>(string indexName) where T : IDataObject;
и затем установка DatabaseFactory со следующим:
public IRavenQueryable<T> Query<T>(string indexName) where T : IDataObject
{
using (var session = store.OpenSession())
{
return session.Query<T>(indexName);
}
}
Вот как выглядят данные в БД. Я подумал, что изображение было бы хорошей идеей, чтобы вы могли видеть и фактическое имя документа в случае, если это поможет с чем-либо:
https://i.imgur.com/Bb39WNm.png
Независимо от того, что я пытаюсь, я продолжаю получать эту ошибку. Если это поможет, полная ошибка здесь ниже. Если потребуется дополнительная информация, сообщите мне, и я предоставлю ее.
Заранее спасибо!
System.InvalidOperationException: Не удалось преобразовать документ NPC / 1818637598 в объект типа Framework.Server.Data.NpcData ---> System.FormatException: входная строка была в неправильном формате.
в System.Number.StringToNumber (System.String str, параметры System.Globalization.NumberStyles, System.Number + NumberBuffer & number, информация System.Globalization.NumberFormatInfo, System.Boolean parseDecimal) [0x00057] в: 0
в System.Number.ParseInt32 (System.String s, стиль System.Globalization.NumberStyles, информация System.Globalization.NumberFormatInfo) [0x00013] в: 0
в System.Int32.Parse (System.String s, System.Globalization.NumberStyles style, поставщик System.IFormatProvider) [0x0000e] в: 0
в System.Convert.ToInt32 (значение System.String, поставщик System.IFormatProvider) [0x00005] в: 0
в System.String.System.IConvertible.ToInt32 (поставщик System.IFormatProvider) [0x00000] в: 0
в System.Convert.ChangeType (значение System.Object, преобразование System.Type, поставщик System.IFormatProvider) [0x0011a] в: 0
в Raven.Client.Json.BlittableJsonReader.ReadAsInt32 () [0x000c7] в <3af6f962c10f46e297126f8db0cace22>: 0
в Newtonsoft.Json.JsonReader.ReadForType (контракт Newtonsoft.Json.Serialization.JsonContract, System.Boolean hasConverter) [0x0004a] в: 0в Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolvePropertyAndCreatorValues (контракт Newtonsoft.Json.Serialization.JsonObjectContract, контейнерный объект Newtonsoft.Json.Serialization.JsonProperty, объект Newtonsoft.Json.JsonReader 0 0ypey в формате 0: тысяч долларов США)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObjectUsingCreatorWithParameters (Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonObjectContract контракт, Newtonsoft.Json.Serialization.Json * объект недвижимости 1процесс .ExecuteQueryOperation (System.Nullable 1[T] take) [0x0005c] in <3af6f962c10f46e297126f8db0cace22>:0
at Raven.Client.Documents.Session.DocumentQuery
1 [T] .GetEnumerator () [0x00000] в <3af6f962c10f46e297126f8db0cace22>: 0
в Raven.Client.Documents.Linq.RavenQueryInspector 1[T].GetEnumerator () [0x00011] in <3af6f962c10f46e297126f8db0cace22>:0
at System.Collections.Generic.List
1 [T] .. ctor (System.Collections.Generic.IEnumerable 1[T] collection) [0x00062] in <e1a80661d61443feb3dbdaac88eeb776>:0
at System.Linq.Enumerable.ToList[TSource] (System.Collections.Generic.IEnumerable
1 [T] источник) [0x00018] в <839a3cb835c04d14aeb58d83bb7bc4b> b
в Framework.Server.Game.MmoZone.LoadZone () [0x00215] в: 0 Обнаружено исключение.