0

我有一个函数可以将一堆“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,我可以看到它不是空的,而是一个 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总是以空值返回。这是怎么回事?当我保存它时它不为空时,它是如何变为空的?

4

1 回答 1

0

确保在处理之前已将更改保存到 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));
        db.Images.Add(sig);
    }
    db.SaveChanges();
}
于 2013-05-23T06:19:52.273 回答