「ImageSignatures」の束を DbContext に書き込む関数があります。
using (var db = new ImageContext())
{
foreach (var file in files)
{
var sig = new ImageSignature
{
FileName = file,
Signature = Signature(file),
};
Console.WriteLine("{0}: {1}", Path.GetFileName(sig.FileName), Sig2Str(sig.Signature));
if (sig.Signature != null)
{
db.Images.Add(sig);
}
}
try
{
records = db.SaveChanges(); // where the heck is this saving to!?
}
...
Signature
プロパティが次のように定義されている場所
[MinLength(420)]
[MaxLength(420)]
[Required]
public sbyte[] Signature { get; set; }
を追加する直前にブレークポイントを配置すると、sig
null ではなく、予想どおり 420 バイトの配列であることがわかります。
後でアプリケーションを実行すると、挿入した ImageSignatures をループしようとします。
foreach (var img1 in db.Images)
{
var set = new List<string> { img1.FileName };
foreach (var img2 in db.Images)
{
if (Distance(img1.Signature, img2.Signature) < 0.6)
{
set.Add(img2.FileName);
}
}
if (set.Count > 1)
{
dupeSets.Add(set);
}
}
しかしSignature
、常にnullとして戻ってきます。それがどうなったのか?保存したときはnullではなかったのに、どうやってnullになったのですか?