【问题标题】:Can't insert NULL into varbinary column using LINQ无法使用 LINQ 将 NULL 插入 varbinary 列
【发布时间】:2014-07-29 14:27:43
【问题描述】:

我有通过 LINQ to SQL 更新记录的代码:

dc.ClCxDemographicFileAttachments.InsertOnSubmit(new MasterDataContext.ClCxDemographicFileAttachment()
{
    ...
    FileData = characteristicDataFileAttachment.FileData,
});

ClCxDemographicFileAttachment 表中的 FileData 列是 VARBINARY(MAX),在 SQL 表中可以为空,DataContext 中的列/属性是 System.Data.Linq.Binary。

问题是,如果我将 FileData 属性设置为 null,LINQ 会为该列 (0x) 生成一个空字节 [] 而不是 NULL。我想要后者。我该如何解决这个问题?

【问题讨论】:

  • FileData 属性和characteristicDataFileAttachment.FileData 的数据类型是什么?
  • 前者是System.Data.Linq.Binary,后者是byte[]。

标签: c# sql linq varbinary


【解决方案1】:

您应该只使用 byte[] 而不是 System.Data.Linq.Binary 的数据类型,否则会发生一些隐式转换,并且您不会在数据库中获得空条目。

【讨论】:

    【解决方案2】:

    DavidG,不知道你为什么删除了你的评论,但你是对的。我只需要将 DataContext 中的 FileData 列从 System.Data.Linq.Binary 更改为 System.Byte[]。不知道为什么是前者。

    【讨论】:

    • 我正在写一个答案并被叫走了:)
    【解决方案3】:

    如果结果是空字节数组(伪代码),则返回 DBNull.Value 时,您可以尝试编写内联:

    FileData = characteristicDataFileAttachment.FileData == emptyByteArray ? DBNull.Value : characteristicDataFileAttachment.FileData, ...
    

    如果您不喜欢内联 if,您也可以将其存储在一个变量中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 2021-10-31
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多