Как издеваться над DbConnectionStringBuilder? - PullRequest
0 голосов
/ 01 июля 2018

Вот простой код, который воспроизводит исключение:

var csbMock = new Mock<DbConnectionStringBuilder>();
var csb = csbMock.Object;
csb.ConnectionString = "data source=.;integrated security=true";
Debug.WriteLine(csb.ConnectionString); // System.NullReferenceException in System.Data.dll

Каркас стека состоит только из одной строки: at System.Data.Common.DbConnectionStringBuilder.get_ConnectionString()

Моя цель - просто получить / установить DbConnectionStringBuilder.ConnectionString свойство макета. В чем здесь проблема?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

На самом деле нет необходимости издеваться над классом DbConnectionStringBuilder .

Нет никаких дополнительных эффектов использования класса, поэтому вы можете создать его экземпляр и использовать его как есть.

var builder = new DbConnectionStringBuilder();
//Set the connection string directly
builder.ConnectionString = "data source=.;integrated security=true";
//or add the parts needed to create a connection string
builder.Clear();
builder.Add("integrated security", true);
builder.Add("Data Source", ".");
0 голосов
/ 01 июля 2018

Эта строка устранила проблему:

csbMock.CallBase = true;

Некоторая магия происходит внутри DbConnectionStringBuilder.ConnectionString сеттера. Он вызывает виртуальных членов, которые переопределяются прокси, а затем это NRE происходит в геттере.

...