Вопрос

У нас есть собственный ORM, который мы здесь используем, и предоставляем строго типизированные оболочки для всех наших таблиц БД.Мы также разрешаем выполнение слабо типизированного специального SQL, но эти запросы по-прежнему проходят через один и тот же класс для получения значений из устройства чтения данных.

При настройке этого класса для работы с Oracle мы столкнулись с интересным вопросом.Лучше использовать DBNull.Value или null?Есть ли какие-либо преимущества от использования DBNull.Value?Кажется более «правильным» использовать null, поскольку мы отделили себя от мира БД, но есть последствия (вы не можете просто слепо ToString() например, когда значение равно нулю), поэтому нам определенно нужно принять осознанное решение.

Это было полезно?

Решение

Я считаю, что лучше использовать null вместо DB null.

Причина в том, что, как вы сказали, вы отделяете себя от мира БД.

Обычно хорошей практикой является проверка ссылочных типов, чтобы убедиться, что они в любом случае не являются нулевыми.Вы будете проверять значение null для других вещей, кроме данных БД, и я считаю, что лучше всего поддерживать согласованность во всей системе и использовать значение null, а не DBNull.

В долгосрочной перспективе я считаю, что с архитектурной точки зрения это лучшее решение.

Другие советы

Если вы написали свой собственный ORM, я бы посоветовал просто использовать null, поскольку вы можете использовать его по своему усмотрению.Я считаю, что DBNull изначально использовался только для того, чтобы обойти тот факт, что типы значений (int, DateTime и т. д.) не могут быть null, поэтому вместо возврата некоторого значения, например нуля или DateTime.Min, которое подразумевать ноль (плохой, плохой), для обозначения этого они создали DBNull.Возможно, в этом было что-то еще, но я всегда предполагал, что причина именно в этом.Однако теперь, когда в C# 3.0 есть типы, допускающие значение NULL, DBNull больше не нужен.Фактически, LINQ to SQL просто повсюду использует значение null.Совершенно никаких проблем.Примите будущее...используйте ноль.;-)

Судя по моему опыту, таблицы DataTable и адаптеры таблиц .NET лучше работают с DBNull.Он также открывает несколько специальных методов при строгой типизации, например DataRow.IsFirstNameNull, если он установлен.

Мне бы хотелось дать вам более точный технический ответ, чем этот, но для меня суть в том, чтобы использовать DBNull при работе с объектами, связанными с базой данных, а затем использовать «стандартный» ноль, когда я имею дело с объектами и кодом, связанным с .NET.

Использовать DBNull.
Мы столкнулись с некоторыми проблемами при использовании null.
Если я правильно помню, вы не можете ВСТАВИТЬ нулевое значение в поле, только DBNull.
Возможно, это связано только с Oracle, извините, подробностей я больше не знаю.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top