public void CloneConnectionDisposed() { var connection = new TestNoopConnection(""); connection.Open(); Assert.AreEqual(ConnectionState.Open, connection.State); TestNoopConnection?cloneConnection; using (var db = new DataConnection(new TestNoopProvider(), connection, false)) { var c = db.Connection; Assert.AreEqual(ConnectionState.Open, c.State); using (var db2 = (DataConnection)db.Clone()) { cloneConnection = db2.Connection as TestNoopConnection; Assert.NotNull(cloneConnection); Assert.AreNotEqual(cloneConnection, connection); Assert.AreEqual(ConnectionState.Open, cloneConnection !.State); } } Assert.AreEqual(ConnectionState.Open, connection.State); Assert.AreEqual(false, connection.IsDisposed); Assert.IsNotNull(cloneConnection); Assert.AreEqual(ConnectionState.Closed, cloneConnection.State); Assert.AreEqual(true, cloneConnection.IsDisposed); }
// see https://github.com/linq2db/linq2db.LINQPad/issues/10 // we create separate connection for GetSchema calls to workaround provider bug // logic not applied if active transaction present - user must remove transaction if he has issues private TResult ExecuteOnNewConnection <TResult>(DataConnection dataConnection, Func <DataConnection, TResult> action) { if (dataConnection.Transaction != null) { return(action(dataConnection)); } else { using (var newConnection = (DataConnection)dataConnection.Clone()) return(action(newConnection)); } }
public void CloneTest(string context) { using (var con = new DataConnection(context)) { var dbName = con.Connection.Database; for (var i = 0; i < 150; i++) { using (var clone = (DataConnection)con.Clone()) dbName = clone.Connection.Database; } } }