Я пытался сохранить сложный объект в EF-коде, используя Json.NET в течение нескольких дней без успеха.Сохранить сложный объект с помощью EF от JSON
[Major edit and tl; dr ;:] Есть ли способ десериализовать объект JSON в сущность и сохранить свои отношения?
Я могу хранить его обычным способом. Моя проблема заключается в десериализации объекта.
По конструкции, Preference
s должен добавлен в базу данных, но их Value
s внешние ключи (дающие PreferenceValue
таблицу).
Это моя модель (упрощенно для краткости):
public class Preference {
public virtual ICollection<PreferenceAttribute> Attributes { get; set; }
}
public class PreferenceAttribute {
public virtual ICollection<Value> Values { get; set; }
}
public class Value {
public int ValueId { get; set; }
public string Description { get; set; }
}
Значения кажутся не привязываться к контексту перед сохранением, в результате чего двигатель хранить новый Value
s вместо использования внешних ключей, предоставляемых объект JSON, который выглядит так:
{
"PreferenceAttributes":[{
"PreferenceTypeId" : 1,
"Values":[
{
"ValueId" : 1
},
{
"ValueId" : 2
},
{
"ValueId" : 3
},
]
}]
}
Я могу сохранить его без каких-либо проблем непосредственно на C#; «Кодекс» Я использую семена предпочтения:
var attribute = new PreferenceAttribute {
AttributeId = 1,
Values = context.Values.OrderBy(a => a.ValueId).Skip(1).Take(5).ToList();
};
var preferece = new Preference {
Attributes = new List<PreferenceAttribute> {
attribute
}
};
//user is fetched from "context" as well
user.Preferences.Add(preferece);
context.SaveChanges();
Пожалуйста, имейте в виду, что это только о Value
с. Проблема, как отмечалось ранее, заключается в том, что новые базы данных Value
s добавляются в базу данных вместо использования их Id
s в качестве внешних ключей для связи с PrefferenceAttribute
s, то есть EF думает, что я хочу добавить новые Value
s, например:
attribute.Values = new List<Value> {
new Value {
ValueId = 1, //This id will be ignored by EF since it's not fetched using context; new record will be inserted;
WhateverAttributes = "WTF"
}
}
С уважением.
Какие у вас проблемы? – rfornal
Ваш JSON не соответствует (упрощенной) версии вашего кода, можете ли вы изменить пожалуйста :) – John
Код, который вы используете, чтобы отличать/сохранять значения «Значения», скорее всего, там, где проблема. Если бы вы могли опубликовать этот код, это было бы полезно. – wahwahwah