Skip to content

Commit b88aa4b

Browse files
committed
save
1 parent 1ba7c3f commit b88aa4b

File tree

10 files changed

+79
-24
lines changed

10 files changed

+79
-24
lines changed

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

Z.EntityFrameworkExtras.labEF6/Request_OutputParam.cs

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using EntityFrameworkExtras.EF6;
22
using System;
33
using System.Collections.Generic;
4+
using System.ComponentModel.DataAnnotations.Schema;
45
using System.Data;
56
using System.Data.Entity;
67
using System.Linq;
@@ -62,15 +63,22 @@ DROP PROCEDURE [dbo].[PROC_Get_EntitySimple]
6263
CREATE PROCEDURE [dbo].[PROC_Get_EntitySimple]
6364
6465
@ParameterID INT ,
65-
@ParameterInt INT = NULL OUTPUT
66+
@ParameterDouble decimal(5,4) ,
67+
@ParameterInt INT = NULL OUTPUT ,
68+
@ParameterDoubleOutput decimal(5,4) = NULL OUTPUT
6669
6770
6871
AS
6972
BEGIN
73+
74+
update entitySimples
75+
set ColumnDouble = @ParameterDouble
76+
7077
Select * from EntitySimples
7178
Where ColumnInt = @ParameterID
72-
7379
Set @ParameterInt = @ParameterID +1
80+
81+
set @ParameterDoubleOutput = @ParameterDouble + 1
7482
END
7583
";
7684
commande.ExecuteNonQuery();
@@ -81,9 +89,33 @@ CREATE PROCEDURE [dbo].[PROC_Get_EntitySimple]
8189
// TEST
8290
using (var context = new EntityContext())
8391
{
84-
var proc_Get_EntitySimple = new Proc_Get_EntitySimple() { ParameterID = 2 };
85-
var entity = context.Database.ExecuteStoredProcedureFirstOrDefault<EntitySimple>(proc_Get_EntitySimple);
86-
var output = proc_Get_EntitySimple.ParameterInt;
92+
try
93+
{
94+
95+
var proc_Get_EntitySimple = new Proc_Get_EntitySimple() { ParameterID = 2, ParameterDouble = new decimal(35.809192) };
96+
var entity = context.Database.ExecuteStoredProcedureFirstOrDefault<EntitySimple>(proc_Get_EntitySimple);
97+
var output = proc_Get_EntitySimple.ParameterInt;
98+
}
99+
catch (Exception e)
100+
{
101+
{
102+
103+
var proc_Get_EntitySimple = new Proc_Get_EntitySimple() { ParameterID = 2, ParameterDouble = new decimal(5.8001) };
104+
var entity = context.Database.ExecuteStoredProcedureFirstOrDefault<EntitySimple>(proc_Get_EntitySimple);
105+
var output = proc_Get_EntitySimple.ParameterInt;
106+
var output2 = proc_Get_EntitySimple.ParameterDoubleOutput;
107+
}
108+
//{
109+
110+
111+
// var proc_Get_EntitySimple = new Proc_Get_EntitySimple() { ParameterID = 2 };
112+
// var entity = context.Database.ExecuteStoredProcedureFirstOrDefault<EntitySimple>(proc_Get_EntitySimple);
113+
// var output = proc_Get_EntitySimple.ParameterInt;
114+
//}
115+
116+
}
117+
118+
var list = context.EntitySimples.ToList();
87119
}
88120
}
89121

@@ -97,6 +129,8 @@ public EntityContext() : base(My.ConnectionString)
97129

98130
protected override void OnModelCreating(DbModelBuilder modelBuilder)
99131
{
132+
modelBuilder.Entity<EntitySimple>().Property(x => x.ColumnDouble).HasPrecision(5, 4);
133+
100134
base.OnModelCreating(modelBuilder);
101135
}
102136
}
@@ -109,12 +143,19 @@ public class Proc_Get_EntitySimple
109143

110144
[StoredProcedureParameter(SqlDbType.Int, Direction = ParameterDirection.Input)]
111145
public int ParameterID { get; set; }
146+
147+
[StoredProcedureParameter(SqlDbType.Decimal, Direction = ParameterDirection.Input, Precision = 5, Scale = 4)]
148+
public decimal? ParameterDouble { get; set; }
149+
150+
[StoredProcedureParameter(SqlDbType.Decimal, Direction = ParameterDirection.Output, Precision = 5, Scale = 4)]
151+
public decimal? ParameterDoubleOutput { get; set; }
112152
}
113153

114154
public class EntitySimple
115155
{
116156
public int ID { get; set; }
117-
public int ColumnInt { get; set; }
157+
public int ColumnInt { get; set; }
158+
public decimal ColumnDouble { get; set; }
118159
public String ColumnString { get; set; }
119160
}
120161
}

0 commit comments

Comments
 (0)