sbyte数组总是返回null

时间:2013-05-23 05:31:15

标签: c# entity-framework

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

1 个答案:

答案 0 :(得分: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();
}