Я периодически синхронизирую данные на странице ASP.NET. У меня есть объект с двумя сложными элементами, которые я игнорирую в Entity Framework, используя атрибут NotMapped. Вместо этого я храню сериализованные значения.EF: Non-nullable UpdateException для свойства NotMapped
Модели:
public class Game
{
//...
[NotMapped]
public Image Image { get; set; }
[NotMapped]
public List<Image> Images { get; set; }
public string Image_Serialized
{
get
{
return JsonConvert.SerializeObject(Image);
}
set
{
Image = JsonConvert.DeserializeObject<Image>(value);
}
}
public string Images_Serialized
{
get
{
return JsonConvert.SerializeObject(Images);
}
set
{
Images = JsonConvert.DeserializeObject<List<Image>>(value);
}
}
//...
}
И ...
public class Image
{
public string IconUrl { get; set; }
public string MediumUrl { get; set; }
public string ScreenUrl { get; set; }
public string SmallUrl { get; set; }
public string SuperUrl { get; set; }
public string ThumbUrl { get; set; }
public string TinyUrl { get; set; }
}
Когда моя синхронизация завершена, я обновить свою базу данных:
foreach(var game in games)
{
// address any null complex types.
if (game.Image == null) game.Image = new Image();
if (game.Images == null) game.Images = new List<Image>();
// add game if new, update if already in db
var dbGame = db.Games.Where(g => g.Id == game.Id).FirstOrDefault();
if (dbGame == null)
{
db.Games.Add(game);
}
else
{
var queriedGame = db.Entry(dbGame);
queriedGame.CurrentValues.SetValues(game);
queriedGame.State = System.Data.Entity.EntityState.Modified;
}
}
// returns 0 results... seems fine
var badGames = games.Where(g => g.Image == null || g.Images == null).ToList();
db.SaveChanges();
Я получаю следующее исключение в БД. SaveChanges():
Server Error in '/' Application.
Null value for non-nullable member. Member: 'Image'.
Благодарим за помощь. Кроме того, почему мне нужно беспокоиться о том, что эти значения равны нулю, если я не ожидаю, что их значения будут непосредственно сохранены в атрибуте db (NotMapped)?
В чем причина сохранения изображения как сериализованной строки, а затем идентификатора изображения в игровом объекте? –
проверить таблицу игр, если у нее есть столбец Image? –
@AliBaig Это не то, что происходит. Существует изображение с изображением и список связанных изображений. Это все URL-адреса, которые ссылаются на изображения на внешнем сервере. Отображаемое изображение не обязательно существует в соответствующем списке. –