【问题标题】:sbyte arrays always coming back nullsbyte 数组总是返回 null
【发布时间】:2013-05-23 14:22:41
【问题描述】:

我有一个函数可以将一堆“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 字节的数组,正如我所期望的那样。

在以后运行应用程序时,我尝试循环遍历我插入的 ImageSignature,

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 总是返回为空。这是怎么回事?当我保存它时它不是空的,它是如何变为空的?

【问题讨论】:

    标签: c# entity-framework


    【解决方案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[]。我的数据包含负数。我一点也不知道它在 DB 中代表什么,如 I still haven't managed to find the DB
    • 我现在可以看到我的数据库中有 133 个条目,但它只有 1 列“文件名”。数据库中完全缺少“签名”列。
    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 2013-08-01
    • 2019-04-20
    • 2011-03-21
    • 2014-03-04
    • 2016-11-02
    • 2014-05-06
    • 2012-06-05
    相关资源
    最近更新 更多