无法使用LINQ将NULL插入varbinary列

时间:2014-07-29 14:27:44

标签: c# sql linq varbinary

我有通过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。我想要后者。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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