У вас есть что-то еще происходит. Я только что создал небольшую примерную таблицу с идентификатором (identity), nullable varbinary (MAX), non-nullable varbinary (MAX) и отметкой времени. Использование следующего кода прекрасно работает без ошибок.
using (var context = new TestDataContext())
{
var binarySample = new BinarySample
{
Image = null,
NonNullImage = new Binary( new byte[0] ),
};
context.BinarySamples.InsertOnSubmit( binarySample );
context.SubmitChanges();
}
Где этот код правильно генерирует (и перехватывает) исключение SQLException, а не ArgumentNullException.
try
{
using (var context = new TestDataContext())
{
var binarySample2 = new BinarySample
{
NonNullImage = null,
Image = new Binary( new byte[0] )
};
context.BinarySamples.InsertOnSubmit( binarySample2 );
context.SubmitChanges();
}
}
catch (SqlException e)
{
Console.WriteLine( e.Message );
}
Возможно ли, что у вас есть частичная реализация класса, у которой есть обработчик SendPropertyChanging для свойства, которое вызывает исключение ArgumentNullException?
РЕДАКТИРОВАТЬ : на основе комментария ОП.
Обратите внимание, что вы не можете назначить переменную типа byte [] двоичному файлу напрямую, поскольку это вызывает операцию неявного преобразования , и неявное преобразование вызовет ArgumentNullException. Вы должны проверить, является ли значение нулевым, прежде чем пытаться присвоить его, и просто присвоить нулевое значение, если переменная byte [] является нулевой. Мне это кажется странным поведением, и я надеюсь, что они изменят его в будущем. В документации MSDN указано, что в будущих версиях могут произойти некоторые изменения.