Skip to content

Commit 5fe2496

Browse files
Merge pull request #541 from johelvisguzman/issue536
Updated the ado.net context to properly get a connection string from the config file
2 parents a9a4179 + 0a5eea0 commit 5fe2496

File tree

3 files changed

+37
-176
lines changed

3 files changed

+37
-176
lines changed

src/DotNetToolkit.Repository.AdoNet/DbHelper.cs

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,12 @@ public sealed class DbHelper : IDisposable
3232
private readonly string _connectionString;
3333
private DbConnection _connection;
3434
private readonly bool _ownsConnection;
35-
private readonly Internal.DataAccessProviderType _providerType;
3635
private readonly IRepositoryConventions _conventions;
3736

3837
#endregion
3938

4039
#region Properties
4140

42-
/// <summary>
43-
/// Gets the provider type.
44-
/// </summary>
45-
internal Internal.DataAccessProviderType ProviderType { get { return _providerType; } }
46-
4741
/// <summary>
4842
/// Gets the provider factory.
4943
/// </summary>
@@ -88,13 +82,14 @@ internal DbHelper(IRepositoryConventions conventions, string nameOrConnectionStr
8882
Guard.NotNull(conventions, nameof(conventions));
8983
Guard.NotEmpty(nameOrConnectionString, nameof(nameOrConnectionString));
9084

91-
var css = GetConnectionStringSettings(nameOrConnectionString);
85+
var css = Guard.EnsureNotNull(
86+
GetConnectionStringSettings(nameOrConnectionString),
87+
"The connection string does not exist in your configuration file.");
9288

9389
_conventions = conventions;
9490
_factory = Internal.DbProviderFactories.GetFactory(css.ProviderName);
9591
_connectionString = css.ConnectionString;
9692
_ownsConnection = true;
97-
_providerType = Internal.DataAccessProvider.GetProviderType(css.ProviderName);
9893
}
9994

10095
/// <summary>
@@ -113,7 +108,6 @@ internal DbHelper(IRepositoryConventions conventions, string providerName, strin
113108
_factory = Internal.DbProviderFactories.GetFactory(providerName);
114109
_connectionString = connectionString;
115110
_ownsConnection = true;
116-
_providerType = Internal.DataAccessProvider.GetProviderType(providerName);
117111
}
118112

119113
/// <summary>
@@ -126,16 +120,9 @@ internal DbHelper(IRepositoryConventions conventions, DbConnection existingConne
126120
Guard.NotNull(conventions, nameof(conventions));
127121
Guard.NotNull(existingConnection, nameof(existingConnection));
128122

129-
if (existingConnection.State == ConnectionState.Closed)
130-
existingConnection.Open();
131-
132123
_conventions = conventions;
133124
_connection = existingConnection;
134125
_ownsConnection = false;
135-
136-
var css = GetConnectionStringSettings(existingConnection.ConnectionString);
137-
138-
_providerType = Internal.DataAccessProvider.GetProviderType(css.ProviderName);
139126
}
140127

141128
#endregion
@@ -1305,21 +1292,18 @@ private static ConnectionStringSettings GetConnectionStringSettings(string nameO
13051292
{
13061293
var css = ConfigurationManager.ConnectionStrings[nameOrConnectionString];
13071294

1308-
if (css == null)
1295+
if (css != null)
1296+
return css;
1297+
1298+
for (var i = 0; i < ConfigurationManager.ConnectionStrings.Count; i++)
13091299
{
1310-
for (var i = 0; i < ConfigurationManager.ConnectionStrings.Count; i++)
1311-
{
1312-
css = ConfigurationManager.ConnectionStrings[i];
1300+
css = ConfigurationManager.ConnectionStrings[i];
13131301

1314-
if (css.ConnectionString.Equals(nameOrConnectionString))
1315-
break;
1316-
}
1302+
if (css.ConnectionString.Equals(nameOrConnectionString))
1303+
return css;
13171304
}
13181305

1319-
if (css == null)
1320-
throw new ArgumentException("The connection string does not exist in your configuration file.");
1321-
1322-
return css;
1306+
return null;
13231307
}
13241308

13251309
private static T ConvertValue<T>(object value)

src/DotNetToolkit.Repository.AdoNet/Internal/AdoNetRepositoryContext.cs

Lines changed: 26 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public AdoNetRepositoryContext(DbConnection existingConnection, bool ensureDatab
147147

148148
#region Private Methods
149149

150-
private void PrepareEntitySetQuery(EntitySet entitySet, bool existInDb, out string sql, out Dictionary<string, object> parameters)
150+
private void PrepareEntitySetQuery(EntitySet entitySet, out string sql, out Dictionary<string, object> parameters)
151151
{
152152
sql = string.Empty;
153153
parameters = new Dictionary<string, object>();
@@ -156,38 +156,31 @@ private void PrepareEntitySetQuery(EntitySet entitySet, bool existInDb, out stri
156156
{
157157
case EntityState.Added:
158158
{
159-
if (existInDb)
160-
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resources.EntityAlreadyBeingTrackedInStore, entitySet.Entity.GetType()));
161-
162-
QueryBuilder.CreateInsertStatement(Conventions, entitySet.Entity, out sql, out parameters);
163-
164-
var canGetScopeIdentity = true;
165-
166-
#if NETFULL
167-
if (_dbHelper.ProviderType == DataAccessProviderType.SqlServerCompact)
168-
canGetScopeIdentity = false;
169-
#endif
170-
171-
if (canGetScopeIdentity)
172-
sql += $"{Environment.NewLine}SELECT SCOPE_IDENTITY()";
159+
QueryBuilder.CreateInsertStatement(
160+
Conventions,
161+
entitySet.Entity,
162+
out sql,
163+
out parameters);
173164

174165
break;
175166
}
176167
case EntityState.Removed:
177168
{
178-
if (!existInDb)
179-
throw new InvalidOperationException(Resources.EntityNotFoundInStore);
180-
181-
QueryBuilder.CreateDeleteStatement(Conventions, entitySet.Entity, out sql, out parameters);
169+
QueryBuilder.CreateDeleteStatement(
170+
Conventions,
171+
entitySet.Entity,
172+
out sql,
173+
out parameters);
182174

183175
break;
184176
}
185177
case EntityState.Modified:
186178
{
187-
if (!existInDb)
188-
throw new InvalidOperationException(Resources.EntityNotFoundInStore);
189-
190-
QueryBuilder.CreateUpdateStatement(Conventions, entitySet.Entity, out sql, out parameters);
179+
QueryBuilder.CreateUpdateStatement(
180+
Conventions,
181+
entitySet.Entity,
182+
out sql,
183+
out parameters);
191184

192185
break;
193186
}
@@ -337,13 +330,9 @@ public int SaveChanges()
337330
var primaryKeyPropertyInfo = Conventions.GetPrimaryKeyPropertyInfos(entityType).First();
338331
var isIdentity = Conventions.IsColumnIdentity(primaryKeyPropertyInfo);
339332

340-
// Checks if the entity exist in the database
341-
var existInDb = _dbHelper.ExecuteObjectExist(Conventions, command, entitySet.Entity);
342-
343333
// Prepare the sql statement
344334
PrepareEntitySetQuery(
345335
entitySet,
346-
existInDb,
347336
out string sql,
348337
out Dictionary<string, object> parameters);
349338

@@ -353,30 +342,17 @@ public int SaveChanges()
353342
command.Parameters.Clear();
354343
command.AddParameters(parameters);
355344

345+
rows += _dbHelper.ExecuteNonQuery(command);
346+
356347
if (entitySet.State == EntityState.Added && isIdentity)
357348
{
358-
#if NETFULL
359-
if (_dbHelper.ProviderType == DataAccessProviderType.SqlServerCompact)
360-
{
361-
_dbHelper.ExecuteNonQuery(command);
362-
363-
sql = "SELECT @@IDENTITY";
364-
parameters.Clear();
365-
366-
command.CommandText = sql;
367-
command.Parameters.Clear();
368-
}
369-
#endif
349+
command.CommandText = "SELECT @@IDENTITY";
350+
command.Parameters.Clear();
351+
370352
var newKey = _dbHelper.ExecuteScalar<object>(command);
371353
var convertedKeyValue = Convert.ChangeType(newKey, primaryKeyPropertyInfo.PropertyType);
372354

373355
primaryKeyPropertyInfo.SetValue(entitySet.Entity, convertedKeyValue, null);
374-
375-
rows++;
376-
}
377-
else
378-
{
379-
rows += _dbHelper.ExecuteNonQuery(command);
380356
}
381357
}
382358
}
@@ -698,13 +674,9 @@ public IPagedQueryResult<IEnumerable<TResult>> GroupBy<TEntity, TGroupKey, TResu
698674
var primaryKeyPropertyInfo = Conventions.GetPrimaryKeyPropertyInfos(entityType).First();
699675
var isIdentity = Conventions.IsColumnIdentity(primaryKeyPropertyInfo);
700676

701-
// Checks if the entity exist in the database
702-
var existInDb = await _dbHelper.ExecuteObjectExistAsync(Conventions, command, entitySet.Entity, cancellationToken);
703-
704677
// Prepare the sql statement
705678
PrepareEntitySetQuery(
706679
entitySet,
707-
existInDb,
708680
out string sql,
709681
out Dictionary<string, object> parameters);
710682

@@ -714,30 +686,17 @@ public IPagedQueryResult<IEnumerable<TResult>> GroupBy<TEntity, TGroupKey, TResu
714686
command.Parameters.Clear();
715687
command.AddParameters(parameters);
716688

689+
rows += await _dbHelper.ExecuteNonQueryAsync(command, cancellationToken);
690+
717691
if (entitySet.State == EntityState.Added && isIdentity)
718692
{
719-
#if NETFULL
720-
if (_dbHelper.ProviderType == DataAccessProviderType.SqlServerCompact)
721-
{
722-
await _dbHelper.ExecuteNonQueryAsync(command, cancellationToken);
723-
724-
sql = "SELECT @@IDENTITY";
725-
parameters.Clear();
726-
727-
command.CommandText = sql;
728-
command.Parameters.Clear();
729-
}
730-
#endif
693+
command.CommandText = "SELECT @@IDENTITY";
694+
command.Parameters.Clear();
695+
731696
var newKey = await _dbHelper.ExecuteScalarAsync<object>(command, cancellationToken);
732697
var convertedKeyValue = Convert.ChangeType(newKey, primaryKeyPropertyInfo.PropertyType);
733698

734699
primaryKeyPropertyInfo.SetValue(entitySet.Entity, convertedKeyValue, null);
735-
736-
rows++;
737-
}
738-
else
739-
{
740-
rows += await _dbHelper.ExecuteNonQueryAsync(command, cancellationToken);
741700
}
742701
}
743702
}

src/DotNetToolkit.Repository.AdoNet/Internal/DbCommandExtensions.cs

Lines changed: 0 additions & 82 deletions
This file was deleted.

0 commit comments

Comments
 (0)