我有通过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。我想要后者。我该如何解决这个问题?
答案 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,也可以将其存储在变量中。