C# sbyte数组总是返回空值

C# sbyte数组总是返回空值,c#,entity-framework,C#,Entity Framework,我有一个函数可以将一组“ImageSignatures”写入DbContext: using (var db = new ImageContext()) { foreach (var file in files) { var sig = new ImageSignature { FileName = file, Signature = Signature(file), };

我有一个函数可以将一组“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!?
    }
    ...
其中,
签名
属性定义为

[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);
    }
}
foreach(db.Images中的var img1)
{
var set=新列表{img1.FileName};
foreach(以db.Images为单位的var img2)
{
if(距离(img1.Signature,img2.Signature)<0.6)
{
set.Add(img2.FileName);
}
}
如果(set.Count>1)
{
添加(集合);
}
}

但是签名总是返回为空。怎么了?当我保存它时它不是空的,它是如何变为空的?

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

不,这在我的代码里有点深。为了简洁,我把它删掉了。文件名恢复正常,只是签名为空。如果您尝试使用
byte[]
而不是
sbyte[]
?还有,数据库中的基础列类型是什么?使用SQL探查器时会发生什么?
db.SaveChanges()
生成了什么SQL查询?有图像的痕迹吗?我不能使用
byte[]
。我的数据包含负数。我一点也不知道它在数据库中表示为什么,我现在可以看到我的数据库中有133个条目,但它只有一列“FileName”。DB中完全缺少“签名”列。