2016-08-04 5 views
1

Я использую следующий шаблон дезинфицировать имена баз данных:Может ли DbProviderFactory.CreateCommandBuilder вернуть null?

var dbProviderFactory = DbProviderFactories.GetFactory(connection); 
using (var commandBuilder = dbProviderFactory.CreateCommandBuilder()) 
{ 
    var fooSafe = commandBuilder.QuoteIdentifier(foo) 
} 

, но каждый раз, когда я делаю это R # жалуется на commandBuilder и говорит

Возможное исключение System.NullReference.

Чтобы избавиться от этого предупреждения я обычно ставлю

Debug.Assert(commandBuilder != null); 

после создания команды строителя.

Я использую в основном a SqlConnection или SQLiteConnection.

Существует не так много об этом в documentation, что просто говорит:

Возвращает новый экземпляр класса провайдера, который реализует класс DbCommandBuilder.

Я не уверен, следует ли проверять построитель команд на значение null или просто игнорировать предупреждение?

+2

В качестве побочного примечания вы можете использовать метод расширения, например [здесь] (https://github.com/matkoch/TestFx/blob/master/src/TestFx.Core/Utilities/Object.NotNull.cs# L26), что сэкономит вам дополнительную строку утверждения. – Matthias

ответ

1

Поскольку в документации говорится, что он вернет «новый экземпляр», я бы не стал беспокоиться о нулевой проверке.

Resharper жалуется, возможно, потому что это виртуальный метод, и любая пользовательская реализация может вернуть значение null.