字节数组总是返回null

本文关键字:返回 null 字节数 数组 字节 | 更新日期: 2023-09-27 18:14:52

我有一个函数来写一堆"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总是返回null。它怎么了?我保存它的时候,它不是空的,它是怎么变成空的?

字节数组总是返回null

确保在处理DbContext之前已将更改保存到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();
}