C# sbyte数组总是返回空值
我有一个函数可以将一组“ImageSignatures”写入DbContext: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), };
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中完全缺少“签名”列。