Skip to content

Commit 04af6a4

Browse files
committed
save
1 parent 3829346 commit 04af6a4

File tree

7 files changed

+49
-101
lines changed

7 files changed

+49
-101
lines changed

EntityFrameworkExtras.EFCore.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Global
2323
EntityFrameworkExtras.Tests.Shared\EntityFrameworkExtras.Tests.Shared.projitems*{59943b99-772a-47e4-aa70-6d758312c00c}*SharedItemsImports = 4
2424
EntityFrameworkExtras.Shared\EntityFrameworkExtras.Shared.projitems*{770fa648-fa98-455d-8bf7-9832c9ede9c6}*SharedItemsImports = 13
2525
EntityFrameworkExtras.Tests.Shared\EntityFrameworkExtras.Tests.Shared.projitems*{8189d203-89f3-4d02-b028-f76ce37c9fdb}*SharedItemsImports = 13
26+
EntityFrameworkExtras.Shared\EntityFrameworkExtras.Shared.projitems*{94101b83-cd6b-4f8a-9ab9-93a0d3371d07}*SharedItemsImports = 5
2627
EndGlobalSection
2728
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2829
Debug|Any CPU = Debug|Any CPU

EntityFrameworkExtras.EFCore3.lab/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class Program
66
{
77
static void Main(string[] args)
88
{
9+
Request_storeProcedure_Transaction.Execute();
910
Request_TimeOut.Execute();
1011
}
1112
}

EntityFrameworkExtras.EFCore3.lab/Request_TimeOut.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Data;
44
using System.Linq;
5+
using System.Reflection;
56
using System.Text;
67
using System.Transactions;
78
using EntityFrameworkExtras.EFCore;
@@ -69,10 +70,7 @@ CREATE PROCEDURE [dbo].[PROC_Get_EntitySimple]
6970
AS
7071
BEGIN
7172
WAITFOR DELAY '00:00:08';
72-
update EntitySimples
73-
Set ColumnInt = @ParameterID ;
74-
75-
Set @ParameterInt = @ParameterID +1
73+
select * from EntitySimples ;
7674
END
7775
";
7876
commande.ExecuteNonQuery();
@@ -81,15 +79,16 @@ update EntitySimples
8179
}
8280

8381
// TEST
84-
using (var context = new EntityContext())
85-
{
86-
var proc_Get_EntitySimple = new Proc_Get_EntitySimple() { ParameterID = 2 };
87-
context.Database.SetCommandTimeout(5);
88-
context.Database.ExecuteStoredProcedure(proc_Get_EntitySimple);
82+
using (var ctx = new EntityContext())
83+
{
8984

85+
var proc_Get_EntitySimple = new Proc_Get_EntitySimple() { ParameterID = 2 };
86+
ctx.Database.SetCommandTimeout(5);
87+
9088

91-
var t = context.Database.ExecuteStoredProcedure<EntitySimple>(proc_Get_EntitySimple);
9289

90+
var t = ctx.Database.ExecuteStoredProcedure<EntitySimple>(proc_Get_EntitySimple);
91+
ctx.Database.ExecuteStoredProcedure(proc_Get_EntitySimple);
9392
// var list = context.EntitySimples.ToList();
9493
}
9594
}

EntityFrameworkExtras.EFCore3.lab/Request_storeProcedure_Transaction.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,23 +126,32 @@ update EntitySimples
126126
using (var context = new EntityContext())
127127
{
128128
var proc_Get_EntitySimple = new Proc_Get_EntitySimple2() { ParameterID = 2 };
129+
var transaction = context.Database.BeginTransaction();
130+
context.Database.ExecuteStoredProcedure<EntitySimple>(proc_Get_EntitySimple);
131+
132+
133+
transaction.Rollback();
134+
var lisa = context.EntitySimples.ToList();
135+
136+
137+
var list = context.EntitySimples.ToList();
138+
}
139+
140+
using (var context = new EntityContext())
141+
{
142+
var proc_Get_EntitySimple = new Proc_Get_EntitySimple2() { ParameterID = 2 };
143+
129144

130145
using (var tran = new TransactionScope())
131146
{
132147
context.Database.ExecuteStoredProcedure<EntitySimple>(proc_Get_EntitySimple);
133148
}
134-
135-
var transaction = context.Database.BeginTransaction();
136-
context.Database.ExecuteStoredProcedure<EntitySimple>(proc_Get_EntitySimple);
137-
138-
transaction.Rollback();
139-
140149
var list = context.EntitySimples.ToList();
141150
}
142151

143152
using (var context = new EntityContext())
144153
{
145-
var proc_Get_EntitySimple = new Proc_Get_EntitySimple() { ParameterID = 2 };
154+
var proc_Get_EntitySimple = new Proc_Get_EntitySimple2() { ParameterID = 2 };
146155
using (var tran = new TransactionScope())
147156
{
148157
context.Database.ExecuteStoredProcedure<EntitySimple>(proc_Get_EntitySimple);

EntityFrameworkExtras.Shared/DatabaseExtensions.EFCore3x.cs

Lines changed: 15 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -64,55 +64,22 @@ public static async Task ExecuteStoredProcedureAsync(this DatabaseFacade databas
6464
/// <param name="database">The database to execute against.</param>
6565
/// <param name="storedProcedure">The stored procedure to execute.</param>
6666
/// <returns></returns>
67-
public static IEnumerable<T> ExecuteStoredProcedure<T>(this DatabaseFacade database, object storedProcedure)
67+
public static IEnumerable<T> ExecuteStoredProcedure<T>(this DatabaseFacade database, object storedProcedure) where T : class
6868
{
6969
if (storedProcedure == null)
70-
throw new ArgumentNullException("storedProcedure");
71-
70+
throw new ArgumentNullException("storedProcedure");
7271

73-
List<T> result = new List<T>();
7472
var info = StoredProcedureParser.BuildStoredProcedureInfo(storedProcedure);
7573

74+
var contextField = database.GetType().GetField("_context", BindingFlags.Instance | BindingFlags.NonPublic);
7675

77-
// from : https://github.com/Fodsuk/EntityFrameworkExtras/pull/23/commits/dce354304aa9a95750f7d2559d1b002444ac46f7
78-
using (var command = database.GetDbConnection().CreateCommand())
79-
{
80-
command.CommandText = info.Sql;
81-
int? commandTimeout = database.GetCommandTimeout();
82-
if (commandTimeout.HasValue)
83-
{
84-
command.CommandTimeout = commandTimeout.Value;
85-
}
86-
command.CommandType = CommandType.Text;
87-
command.Parameters.AddRange(info.SqlParameters);
88-
command.Transaction = database.CurrentTransaction?.GetDbTransaction();
89-
database.OpenConnection();
90-
91-
using (var resultReader = command.ExecuteReader())
92-
{
93-
T obj = default(T);
94-
95-
while (resultReader.Read())
96-
{
97-
obj = Activator.CreateInstance<T>();
98-
foreach (PropertyInfo prop in obj.GetType().GetProperties())
99-
{
100-
var val = GetValue(resultReader, prop.Name);
101-
if (!object.Equals(val, DBNull.Value))
102-
{
103-
prop.SetValue(obj, val, null);
104-
}
105-
}
106-
107-
result.Add(obj);
108-
}
109-
}
110-
111-
}
76+
var context = (DbContext)contextField.GetValue(database);
11277

113-
SetOutputParameterValues(info.SqlParameters, storedProcedure);
78+
List<T> result = context.Set<T>().FromSqlRaw(info.Sql, info.SqlParameters).AsNoTracking().ToList();
79+
80+
SetOutputParameterValues(info.SqlParameters, storedProcedure);
11481

115-
return result;
82+
return result;
11683
}
11784

11885
/// <summary>
@@ -124,51 +91,18 @@ public static IEnumerable<T> ExecuteStoredProcedure<T>(this DatabaseFacade datab
12491
/// <param name="storedProcedure">The stored procedure to execute.</param>
12592
/// <param name="cancellationToken">The cancellation token.</param>
12693
/// <returns></returns>
127-
public static async Task<IEnumerable<T>> ExecuteStoredProcedureAsync<T>(this DatabaseFacade database, object storedProcedure, CancellationToken cancellationToken = default)
94+
public static async Task<IEnumerable<T>> ExecuteStoredProcedureAsync<T>(this DatabaseFacade database, object storedProcedure, CancellationToken cancellationToken = default) where T : class
12895
{
12996
if (storedProcedure == null)
13097
throw new ArgumentNullException("storedProcedure");
13198

132-
133-
List<T> result = new List<T>();
13499
var info = StoredProcedureParser.BuildStoredProcedureInfo(storedProcedure);
135100

101+
var contextField = database.GetType().GetField("_context", BindingFlags.Instance | BindingFlags.NonPublic);
102+
103+
var context = (DbContext)contextField.GetValue(database);
136104

137-
// from : https://github.com/Fodsuk/EntityFrameworkExtras/pull/23/commits/dce354304aa9a95750f7d2559d1b002444ac46f7
138-
using (var command = database.GetDbConnection().CreateCommand())
139-
{
140-
command.CommandText = info.Sql;
141-
int? commandTimeout = database.GetCommandTimeout();
142-
if (commandTimeout.HasValue)
143-
{
144-
command.CommandTimeout = commandTimeout.Value;
145-
}
146-
command.CommandType = CommandType.Text;
147-
command.Parameters.AddRange(info.SqlParameters);
148-
command.Transaction = database.CurrentTransaction?.GetDbTransaction();
149-
database.OpenConnection();
150-
151-
using (var resultReader = await command.ExecuteReaderAsync(cancellationToken).ConfigureAwait(false))
152-
{
153-
T obj = default(T);
154-
155-
while (await resultReader.ReadAsync(cancellationToken).ConfigureAwait(false))
156-
{
157-
obj = Activator.CreateInstance<T>();
158-
foreach (PropertyInfo prop in obj.GetType().GetProperties())
159-
{
160-
var val = GetValue(resultReader, prop.Name);
161-
if (!object.Equals(val, DBNull.Value))
162-
{
163-
prop.SetValue(obj, val, null);
164-
}
165-
}
166-
167-
result.Add(obj);
168-
}
169-
}
170-
171-
}
105+
List<T> result = await context.Set<T>().FromSqlRaw(info.Sql, info.SqlParameters).AsNoTracking().ToListAsync(cancellationToken);
172106

173107
SetOutputParameterValues(info.SqlParameters, storedProcedure);
174108

@@ -183,7 +117,7 @@ public static async Task<IEnumerable<T>> ExecuteStoredProcedureAsync<T>(this Dat
183117
/// <param name="database">The database to execute against.</param>
184118
/// <param name="storedProcedure">The stored procedure to execute.</param>
185119
/// <returns></returns>
186-
public static T ExecuteStoredProcedureFirstOrDefault<T>(this DatabaseFacade database, object storedProcedure)
120+
public static T ExecuteStoredProcedureFirstOrDefault<T>(this DatabaseFacade database, object storedProcedure) where T : class
187121
{
188122
return database.ExecuteStoredProcedure<T>(storedProcedure).FirstOrDefault();
189123
}
@@ -197,7 +131,7 @@ public static T ExecuteStoredProcedureFirstOrDefault<T>(this DatabaseFacade data
197131
/// <param name="storedProcedure">The stored procedure to execute.</param>
198132
/// <param name="cancellationToken">The cancellation token.</param>
199133
/// <returns></returns>
200-
public static async Task<T> ExecuteStoredProcedureFirstOrDefaultAsync<T>(this DatabaseFacade database, object storedProcedure, CancellationToken cancellationToken = default)
134+
public static async Task<T> ExecuteStoredProcedureFirstOrDefaultAsync<T>(this DatabaseFacade database, object storedProcedure, CancellationToken cancellationToken = default) where T : class
201135
{
202136
var executed = await database.ExecuteStoredProcedureAsync<T>(storedProcedure, cancellationToken).ConfigureAwait(false);
203137

EntityFrameworkExtras.Tests.Shared/Integration/DatabaseIntegrationTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ public void ExecuteStoredProcedure(object storedProcedure)
4040
context.Database.ExecuteStoredProcedure(storedProcedure);
4141
}
4242

43-
public IEnumerable<T> ExecuteStoredProcedure<T>(object storedProcedure)
43+
public IEnumerable<T> ExecuteStoredProcedure<T>(object storedProcedure) where T : class
4444
{
4545
return context.Database.ExecuteStoredProcedure<T>(storedProcedure);
4646
}
4747

48-
public T ExecuteStoredProcedureSingle<T>(object storedProcedure)
48+
public T ExecuteStoredProcedureSingle<T>(object storedProcedure) where T : class
4949
{
5050
return context.Database.ExecuteStoredProcedure<T>(storedProcedure).FirstOrDefault();
5151
}

EntityFrameworkExtras.sln

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntityFrameworkExtras.EF5.N
4848
EndProject
4949
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntityFrameworkExtras.EF6.Net40", "EntityFrameworkExtras.EF6.Net40\EntityFrameworkExtras.EF6.Net40.csproj", "{7ED1D61C-9396-4663-952D-D2F7DAD19B18}"
5050
EndProject
51-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z.EntityFrameworkExtras.Lab.EFCore30", "EntityFrameworkExtras.EFCore3.lab\Z.EntityFrameworkExtras.Lab.EFCore30.csproj", "{F213770C-7433-44F6-A44E-EC9E3A304BDC}"
51+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Z.EntityFrameworkExtras.Lab.EFCore30", "EntityFrameworkExtras.EFCore3.lab\Z.EntityFrameworkExtras.Lab.EFCore30.csproj", "{F213770C-7433-44F6-A44E-EC9E3A304BDC}"
5252
EndProject
5353
Global
5454
GlobalSection(SharedMSBuildProjectFiles) = preSolution
@@ -62,7 +62,11 @@ Global
6262
EntityFrameworkExtras.Shared\EntityFrameworkExtras.Shared.projitems*{7ed1d61c-9396-4663-952d-d2f7dad19b19}*SharedItemsImports = 4
6363
EntityFrameworkExtras.Tests.Shared\EntityFrameworkExtras.Tests.Shared.projitems*{8189d203-89f3-4d02-b028-f76ce37c9fdb}*SharedItemsImports = 13
6464
EntityFrameworkExtras.Tests.Shared\EntityFrameworkExtras.Tests.Shared.projitems*{8522b7eb-3d2d-4e43-ba3d-3f16095b8efb}*SharedItemsImports = 4
65+
EntityFrameworkExtras.Shared\EntityFrameworkExtras.Shared.projitems*{8a995513-92c8-4e00-8c99-48bd56496f89}*SharedItemsImports = 5
66+
EntityFrameworkExtras.Shared\EntityFrameworkExtras.Shared.projitems*{909f9fc3-3384-467b-9a7d-1b2328080ba8}*SharedItemsImports = 5
67+
EntityFrameworkExtras.Shared\EntityFrameworkExtras.Shared.projitems*{992957e5-4e42-4e90-b510-2c3e3ca56b25}*SharedItemsImports = 5
6568
EntityFrameworkExtras.Tests.Shared\EntityFrameworkExtras.Tests.Shared.projitems*{b0c9b99b-0c3c-4e72-85d7-12bcd185c067}*SharedItemsImports = 4
69+
EntityFrameworkExtras.Shared\EntityFrameworkExtras.Shared.projitems*{c4c0a992-318d-4b77-b151-69e18b789a52}*SharedItemsImports = 5
6670
EndGlobalSection
6771
GlobalSection(SolutionConfigurationPlatforms) = preSolution
6872
Debug|Any CPU = Debug|Any CPU

0 commit comments

Comments
 (0)