私のASP.NETページで定期的にデータを同期しています。私は2つの複雑なメンバーを持つオブジェクトを持っています。これは、NotMapped属性を使用してEntity Frameworkで無視しています。代わりに、私はシリアル化された値を格納します。EF:NotMappedプロパティのnullableでないUpdateException
モデル:
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属性)に直接格納されることを期待していない場合、これらの値がnullであることを心配する必要があるのはなぜですか?
イメージをシリアル化された文字列として保存し、次にゲームオブジェクトのイメージIDを保存する理由は何ですか? –
列の画像があるゲームテーブルを確認しますか? –
@AliBaigこれは何が起きているかではありません。注目の画像と関連画像のリストがあります。これらはすべて、外部サーバー上のイメージにリンクするURLです。注目画像は必ずしも関連リストに存在するとは限りません。 –