Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit beb6b2f

Browse files
committed
Update T4 SP Templates to use managed ExecFilter and OrmLite db connection
1 parent 3e076e1 commit beb6b2f

File tree

10 files changed

+5206
-21
lines changed

10 files changed

+5206
-21
lines changed

src/ServiceStack.OrmLite/OrmLiteSPStatement.cs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44

55
namespace ServiceStack.OrmLite
66
{
7-
public class OrmLiteSPStatement
7+
public class OrmLiteSPStatement : IDisposable
88
{
9-
private IDbCommand command { get; set; }
10-
private IOrmLiteDialectProvider dialectProvider { get; set; }
9+
private readonly IDbConnection db;
10+
private readonly IDbCommand dbCmd;
11+
private readonly IOrmLiteDialectProvider dialectProvider;
1112

12-
public OrmLiteSPStatement(IDbCommand cmd)
13+
public OrmLiteSPStatement(IDbCommand dbCmd)
14+
: this(null, dbCmd) {}
15+
16+
public OrmLiteSPStatement(IDbConnection db, IDbCommand dbCmd)
1317
{
14-
command = cmd;
15-
dialectProvider = cmd.GetDialectProvider();
18+
this.db = db;
19+
this.dbCmd = dbCmd;
20+
dialectProvider = dbCmd.GetDialectProvider();
1621
}
1722

1823
public List<T> ConvertToList<T>()
@@ -23,7 +28,7 @@ public List<T> ConvertToList<T>()
2328
IDataReader reader = null;
2429
try
2530
{
26-
reader = command.ExecuteReader();
31+
reader = dbCmd.ExecuteReader();
2732
return reader.ConvertToList<T>(dialectProvider);
2833
}
2934
finally
@@ -41,7 +46,7 @@ public List<T> ConvertToScalarList<T>()
4146
IDataReader reader = null;
4247
try
4348
{
44-
reader = command.ExecuteReader();
49+
reader = dbCmd.ExecuteReader();
4550
return reader.Column<T>(dialectProvider);
4651
}
4752
finally
@@ -59,7 +64,7 @@ public T ConvertTo<T>()
5964
IDataReader reader = null;
6065
try
6166
{
62-
reader = command.ExecuteReader();
67+
reader = dbCmd.ExecuteReader();
6368
return reader.ConvertTo<T>(dialectProvider);
6469
}
6570
finally
@@ -77,7 +82,7 @@ public T ConvertToScalar<T>()
7782
IDataReader reader = null;
7883
try
7984
{
80-
reader = command.ExecuteReader();
85+
reader = dbCmd.ExecuteReader();
8186
return reader.Scalar<T>(dialectProvider);
8287
}
8388
finally
@@ -95,7 +100,7 @@ public List<T> ConvertFirstColumnToList<T>()
95100
IDataReader reader = null;
96101
try
97102
{
98-
reader = command.ExecuteReader();
103+
reader = dbCmd.ExecuteReader();
99104
return reader.Column<T>(dialectProvider);
100105
}
101106
finally
@@ -113,7 +118,7 @@ public HashSet<T> ConvertFirstColumnToListDistinct<T>()
113118
IDataReader reader = null;
114119
try
115120
{
116-
reader = command.ExecuteReader();
121+
reader = dbCmd.ExecuteReader();
117122
return reader.ColumnDistinct<T>(dialectProvider);
118123
}
119124
finally
@@ -125,15 +130,15 @@ public HashSet<T> ConvertFirstColumnToListDistinct<T>()
125130

126131
public int ExecuteNonQuery()
127132
{
128-
return command.ExecuteNonQuery();
133+
return dbCmd.ExecuteNonQuery();
129134
}
130135

131136
public bool HasResult()
132137
{
133138
IDataReader reader = null;
134139
try
135140
{
136-
reader = command.ExecuteReader();
141+
reader = dbCmd.ExecuteReader();
137142
if (reader.Read())
138143
return true;
139144
else
@@ -145,5 +150,10 @@ public bool HasResult()
145150
reader.Close();
146151
}
147152
}
153+
154+
public void Dispose()
155+
{
156+
OrmLiteConfig.ExecFilter.DisposeCommand(this.dbCmd, this.db);
157+
}
148158
}
149159
}

src/T4/OrmLite.SP.tt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,15 @@ namespace <#=SPNamespace#>
3838
}
3939

4040
<#foreach(var sp in sps){#>
41-
public static OrmLiteSPStatement <#=sp.CleanName#>(this IDbConnection dbConnection <#foreach(var param in sp.Parameters){#> , <#=param.NullableSysType#> <#=Inflector.MakeInitialLowerCase(param.Name)#> = null <#}#>)
41+
public static OrmLiteSPStatement <#=sp.CleanName#>(this IDbConnection db<#foreach(var param in sp.Parameters){#>, <#=param.NullableSysType#> <#=Inflector.MakeInitialLowerCase(param.Name)#> = null<#}#>)
4242
{
43-
DbCommand dbCommand = (DbCommand)dbConnection.CreateCommand();
44-
dbCommand.CommandText = "<#=sp.Name#>";
45-
dbCommand.CommandType = CommandType.StoredProcedure;
46-
dbCommand.Transaction = OrmLiteConfig.TSTransaction!= null ? (DbTransaction)OrmLiteConfig.TSTransaction : null;
43+
var dbCmd = (DbCommand)OrmLiteConfig.ExecFilter.CreateCommand(db).ToDbCommand();
44+
dbCmd.CommandText = "<#=sp.Name#>";
45+
dbCmd.CommandType = CommandType.StoredProcedure;
4746
<#if (sp.Parameters.Count > 0) { foreach(var param in sp.Parameters){#>
48-
dbCommand.Parameters.Add(CreateNewParameter(dbCommand,"<#=param.Name#>",<#=Inflector.MakeInitialLowerCase(param.Name)#>,ParameterDirection.Input,<#=param.DbType#>));
47+
dbCmd.Parameters.Add(CreateNewParameter(dbCmd,"<#=param.Name#>",<#=Inflector.MakeInitialLowerCase(param.Name)#>,ParameterDirection.Input,<#=param.DbType#>));
4948
<#}#> <#}#>
50-
return new OrmLiteSPStatement(dbCommand);
49+
return new OrmLiteSPStatement(db, dbCmd);
5150
}
5251

5352
<#}#>

tests/ServiceStack.OrmLiteV45.Tests/App.config

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,15 @@
44
<add key="servicestack:license" value="1001-e1JlZjoxMDAxLE5hbWU6VGVzdCBCdXNpbmVzcyxUeXBlOkJ1c2luZXNzLEhhc2g6UHVNTVRPclhvT2ZIbjQ5MG5LZE1mUTd5RUMzQnBucTFEbTE3TDczVEF4QUNMT1FhNXJMOWkzVjFGL2ZkVTE3Q2pDNENqTkQyUktRWmhvUVBhYTBiekJGUUZ3ZE5aZHFDYm9hL3lydGlwUHI5K1JsaTBYbzNsUC85cjVJNHE5QVhldDN6QkE4aTlvdldrdTgyTk1relY2eis2dFFqTThYN2lmc0JveHgycFdjPSxFeHBpcnk6MjAxMy0wMS0wMX0="/>
55
<add key="ClientSettingsProvider.ServiceUri" value=""/>
66
</appSettings>
7+
<connectionStrings>
8+
<add name="AppDb" connectionString="Server=localhost;Database=test;User Id=test;Password=test;" providerName="System.Data.SqlClient"/>
9+
</connectionStrings>
10+
11+
<!--<system.data>
12+
<DbProviderFactories>
13+
<add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
14+
</DbProviderFactories>
15+
</system.data>-->
16+
17+
718
</configuration>

tests/ServiceStack.OrmLiteV45.Tests/ServiceStack.OrmLiteV45.Tests.csproj

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,17 @@
7979
<SubType>Code</SubType>
8080
</Compile>
8181
<Compile Include="SqlExpressionTests.cs" />
82+
<Compile Include="T4\OrmLite.Poco.cs">
83+
<AutoGen>True</AutoGen>
84+
<DesignTime>True</DesignTime>
85+
<DependentUpon>OrmLite.Poco.tt</DependentUpon>
86+
</Compile>
87+
<Compile Include="T4\OrmLite.SP.cs">
88+
<AutoGen>True</AutoGen>
89+
<DesignTime>True</DesignTime>
90+
<DependentUpon>OrmLite.SP.tt</DependentUpon>
91+
</Compile>
92+
<Compile Include="T4\OrmLiteT4Tests.cs" />
8293
<Compile Include="TestHelpers.cs" />
8394
<Compile Include="UseCase\CustomerOrdersUseCase.cs" />
8495
</ItemGroup>
@@ -103,13 +114,25 @@
103114
<ItemGroup>
104115
<None Include="App.config" />
105116
<None Include="packages.config" />
117+
<None Include="T4\OrmLite.Core.ttinclude" />
118+
<None Include="T4\OrmLite.Poco.tt">
119+
<Generator>TextTemplatingFileGenerator</Generator>
120+
<LastGenOutput>OrmLite.Poco.cs</LastGenOutput>
121+
</None>
122+
<None Include="T4\OrmLite.SP.tt">
123+
<Generator>TextTemplatingFileGenerator</Generator>
124+
<LastGenOutput>OrmLite.SP.cs</LastGenOutput>
125+
</None>
106126
</ItemGroup>
107127
<ItemGroup>
108128
<Content Include="..\..\lib\sqlite3.dll">
109129
<Link>sqlite3.dll</Link>
110130
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
111131
</Content>
112132
</ItemGroup>
133+
<ItemGroup>
134+
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
135+
</ItemGroup>
113136
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
114137
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
115138
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

0 commit comments

Comments
 (0)