Skip to content

Commit 8cf3cf3

Browse files
Merge pull request #27 from Lempireqc/master
save
2 parents 0fd74bf + b88aa4b commit 8cf3cf3

19 files changed

+536
-19
lines changed

EntityFrameworkExtras.Shared/DatabaseExtensions.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ private static object GetValue(this DbDataReader reader, string name)
121121
catch (Exception) { }
122122
return val;
123123
}
124+
125+
public static T ExecuteStoredProcedureFirstOrDefault<T>(this DatabaseFacade database, object storedProcedure)
126+
{
127+
return database.ExecuteStoredProcedure<T>(storedProcedure).FirstOrDefault();
128+
}
124129
#else
125130
public static IEnumerable<T> ExecuteStoredProcedure<T>(this Database database, object storedProcedure)
126131
{
@@ -129,13 +134,18 @@ public static IEnumerable<T> ExecuteStoredProcedure<T>(this Database database, o
129134

130135
var info = StoredProcedureParser.BuildStoredProcedureInfo(storedProcedure);
131136

137+
// need resolution for info.SqlParameters when a paramater have direction output.
132138
List<T> result = database.SqlQuery<T>(info.Sql, info.SqlParameters).ToList();
133139

134140
SetOutputParameterValues(info.SqlParameters, storedProcedure);
135141

136142
return result;
137143
}
138-
#endif
144+
public static T ExecuteStoredProcedureFirstOrDefault<T>(this Database database, object storedProcedure)
145+
{
146+
return database.ExecuteStoredProcedure<T>(storedProcedure).FirstOrDefault();
147+
}
148+
#endif
139149

140150
private static void SetOutputParameterValues(IEnumerable<SqlParameter> sqlParameters, object storedProcedure)
141151
{

EntityFrameworkExtras.Shared/StoredProcedureParameterAttribute.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ public StoredProcedureParameterAttribute(SqlDbType dataType, StoredProcedurePara
5656
/// </summary>
5757
public string ParameterName { get; set; }
5858

59-
public ParameterDirection Direction { get; set; }
59+
public ParameterDirection Direction { get; set; }
60+
61+
// NEED TEXT!
62+
public byte Precision { get; set; }
63+
64+
// NEED TEXT!
65+
public byte Scale { get; set; }
6066
}
6167
}

EntityFrameworkExtras.Shared/StoredProcedureParameterInfo.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ internal class StoredProcedureParameterInfo
1919
internal bool IsMandatory { get; set; }
2020
internal bool IsUserDefinedTable { get; set; }
2121
internal int Size { get; set; }
22+
internal byte Precision { get; set; }
23+
internal byte Scale { get; set; }
2224
internal PropertyInfo PropertyInfo { get; set; }
2325
}
2426
}

EntityFrameworkExtras.Shared/StoredProcedureParser.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,10 @@ public static Collection<StoredProcedureParameterInfo> BuildStoredProcedureParam
7676
SqlDataType = attribute.DataType,
7777
PropertyInfo = propertyInfo,
7878
Direction = attribute.Direction,
79-
Size = attribute.Size
80-
});
79+
Size = attribute.Size,
80+
Scale = attribute.Scale,
81+
Precision = attribute.Precision
82+
});
8183
}
8284
}
8385

@@ -111,10 +113,11 @@ private static SqlParameter[] BuildSqlParameters(object storedProcedure, IEnumer
111113
p.IsMandatory,
112114
p.Size,
113115
p.IsUserDefinedTable,
114-
p.IsUserDefinedTable ?
115-
_helper.GetUserDefinedTableType(p.PropertyInfo) : null,
116+
p.IsUserDefinedTable ? _helper.GetUserDefinedTableType(p.PropertyInfo) : null,
116117
p.SqlDataType,
117-
p.Direction);
118+
p.Direction,
119+
p.Scale,
120+
p.Precision);
118121

119122
sqlParams.Add(sqlParameter);
120123
}
@@ -123,7 +126,7 @@ private static SqlParameter[] BuildSqlParameters(object storedProcedure, IEnumer
123126
}
124127

125128
private static SqlParameter GenerateSqlParameter(string parameterName, object paramValue, bool mandatory, int size,
126-
bool isUserDefinedTableParameter, string udtType, SqlDbType dataType, ParameterDirection direction)
129+
bool isUserDefinedTableParameter, string udtType, SqlDbType dataType, ParameterDirection direction, byte scale, byte precision)
127130
{
128131
var sqlParameter = new SqlParameter("@" + parameterName, paramValue ?? DBNull.Value)
129132
{
@@ -137,6 +140,9 @@ private static SqlParameter GenerateSqlParameter(string parameterName, object pa
137140
else
138141
sqlParameter.SqlDbType = dataType;
139142

143+
sqlParameter.Scale = scale;
144+
sqlParameter.Precision = precision;
145+
140146
return sqlParameter;
141147
}
142148

EntityFrameworkExtras.Tests.Shared/Integration/IntegrationSqlScript.sql

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ CREATE PROCEDURE AllTypesStoredProcedure
5252
@ParameterDateTime DATETIME = NULL,
5353
@ParameterDateTime2 DATETIME2 = NULL,
5454
@ParameterDateTimeOffset DATETIMEOFFSET = NULL,
55-
@ParameterDecimal DECIMAL = NULL,
55+
@ParameterDecimal DECIMAL(5,2) = NULL,
5656
@ParameterFloat FLOAT = NULL,
5757
@ParameterImage IMAGE = NULL,
5858
@ParameterInt INT = NULL,
@@ -87,7 +87,7 @@ BEGIN
8787
ParameterDateTime DATETIME NULL,
8888
ParameterDateTime2 DATETIME2 NULL,
8989
ParameterDateTimeOffset DATETIMEOFFSET NULL,
90-
ParameterDecimal DECIMAL NULL,
90+
ParameterDecimal DECIMAL(5,2) NULL,
9191
ParameterFloat FLOAT NULL,
9292
ParameterImage IMAGE NULL,
9393
ParameterInt INT NULL,
@@ -288,7 +288,7 @@ CREATE PROCEDURE AllTypesParameterOutputStoredProcedure
288288
@ParameterDateTime DATETIME = NULL OUTPUT,
289289
@ParameterDateTime2 DATETIME2 = NULL OUTPUT,
290290
@ParameterDateTimeOffset DATETIMEOFFSET = NULL OUTPUT,
291-
@ParameterDecimal DECIMAL = NULL OUTPUT,
291+
@ParameterDecimal DECIMAL(5,2) = NULL OUTPUT,
292292
@ParameterFloat FLOAT = NULL OUTPUT,
293293
@ParameterInt INT = NULL OUTPUT,
294294
@ParameterMoney MONEY = NULL OUTPUT,
@@ -317,7 +317,7 @@ BEGIN
317317
SET @ParameterDateTime = CAST('1990-12-04 06:44:04' AS DATETIME)
318318
SET @ParameterDateTime2 = CAST('1968-10-23 12:45:37.123' AS DATETIME2)
319319
SET @ParameterDateTimeOffset = CAST('2007-05-08 12:35:29.123 +12:15' AS DATETIMEOFFSET)
320-
SET @ParameterDecimal = 555
320+
SET @ParameterDecimal = 555.01
321321
SET @ParameterFloat = 897
322322
SET @ParameterInt = 25
323323
SET @ParameterMoney = 1300
@@ -354,7 +354,7 @@ CREATE TYPE AllTypesUDT AS TABLE
354354
ParameterDateTime DATETIME NULL,
355355
ParameterDateTime2 DATETIME2 NULL,
356356
ParameterDateTimeOffset DATETIMEOFFSET NULL,
357-
ParameterDecimal DECIMAL NULL,
357+
ParameterDecimal DECIMAL(5,2) NULL,
358358
ParameterFloat FLOAT NULL,
359359
ParameterImage IMAGE NULL,
360360
ParameterInt INT NULL,
@@ -394,7 +394,7 @@ BEGIN
394394
ParameterDateTime DATETIME NULL,
395395
ParameterDateTime2 DATETIME2 NULL,
396396
ParameterDateTimeOffset DATETIMEOFFSET NULL,
397-
ParameterDecimal DECIMAL NULL,
397+
ParameterDecimal DECIMAL(5,2) NULL,
398398
ParameterFloat FLOAT NULL,
399399
ParameterImage IMAGE NULL,
400400
ParameterInt INT NULL,

EntityFrameworkExtras.Tests.Shared/Integration/ParameterDecimalTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public void Parameter_Execute_NoErrors()
1212
{
1313
var procedure = new AllTypesStoredProcedure();
1414

15-
procedure.ParameterDecimal = 555m;
15+
procedure.ParameterDecimal = 555.01m;
1616

1717
Assert.DoesNotThrow(() => ExecuteStoredProcedure(procedure));
1818
}

EntityFrameworkExtras.Tests.Shared/Integration/ParameterSizeTests.OutputParameters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public void Execute_ParameterDecimalNoSizeSet_CorrectValueReturned()
109109

110110
ExecuteStoredProcedure<ParameterSizeStoredProcedureReturn>(proc);
111111

112-
Assert.AreEqual(555m, proc.ParameterDecimal);
112+
Assert.AreEqual(555.01m, proc.ParameterDecimal);
113113
}
114114

115115
[Test]

EntityFrameworkExtras.Tests.Shared/Integration/StoredProcedures/AllTypesParameterOutputStoredProcedure.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class AllTypesParameterOutputStoredProcedure
4141
[StoredProcedureParameter(SqlDbType.DateTimeOffset, Direction = ParameterDirection.Output)]
4242
public DateTimeOffset? ParameterDateTimeOffset { get; set; }
4343

44-
[StoredProcedureParameter(SqlDbType.Decimal, Direction = ParameterDirection.Output)]
44+
[StoredProcedureParameter(SqlDbType.Decimal, Direction = ParameterDirection.Output, Precision = 5, Scale = 2)]
4545
public Decimal? ParameterDecimal { get; set; }
4646

4747
[StoredProcedureParameter(SqlDbType.Float, Direction = ParameterDirection.Output)]

EntityFrameworkExtras.Tests.Shared/Integration/StoredProcedures/AllTypesStoredProcedure.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class AllTypesStoredProcedure
4141
[StoredProcedureParameter(SqlDbType.DateTimeOffset)]
4242
public DateTimeOffset? ParameterDateTimeOffset { get; set; }
4343

44-
[StoredProcedureParameter(SqlDbType.Decimal)]
44+
[StoredProcedureParameter(SqlDbType.Decimal, Precision = 5, Scale = 2)]
4545
public Decimal? ParameterDecimal { get; set; }
4646

4747
[StoredProcedureParameter(SqlDbType.Float)]

EntityFrameworkExtras.Tests.Shared/Integration/UserDefinedTableTypeColumnTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public void Execute_CorrectColumnOrder_NoErrors()
1717
{
1818
new AllTypesUserDefinedTable()
1919
{
20-
ParameterDecimal = 555m /* ParameterDecimal - Column 10 */
20+
ParameterDecimal = 555.01m /* ParameterDecimal - Column 10 */
2121
}
2222
};
2323

0 commit comments

Comments
 (0)