В SqlServer есть таблица:
create table TEST123
(
WEBAPP_ID int,
DD_AMOUNT money
)
В BLToolkit заведён класс:
[TableName("TEST123")]
public abstract class Test123
{
[MapField("WEBAPP_ID"), PrimaryKey(0)]
public abstract int Id { get; set; }
[MapField("DD_AMOUNT"), NullValue(0), DbType(DbType.Currency)]
public abstract double DirectDebitAmount { get; set; }
}
Далее есть код, который вставляет item:
using (DbManager db = new DbManager())
{
Test123 item = TypeAccessor<Test123>.CreateInstanceEx();
item.Id = 3;
item.DirectDebitAmount = 0;
SqlQuery<Test123> query = new SqlQuery<Test123>();
query.Insert(db, item);
}
Но здесь в SqlServer вылетает ошибка, так как BLToolkit "генерит" след. sql:
exec sp_executesql N'INSERT INTO [TEST123]
(
[WEBAPP_ID],
[DD_AMOUNT]
) VALUES (
@WEBAPP_ID_P,
@DD_AMOUNT_P
)',N'@WEBAPP_ID_P int,@DD_AMOUNT_P money',@WEBAPP_ID_P=3,@DD_AMOUNT_P=default
вместо(как я полагаю):
exec sp_executesql N'INSERT INTO [TEST123]
(
[WEBAPP_ID],
[DD_AMOUNT]
) VALUES (
@WEBAPP_ID_P,
@DD_AMOUNT_P
)',N'@WEBAPP_ID_P int,@DD_AMOUNT_P money',@WEBAPP_ID_P=3,@DD_AMOUNT_P=NULL
Вероятно (я не очень разбираюсь во внутренностях BLToolkit), что это можно исправить так:
diff --git a/Tools/BLToolkit/DataAccess/SqlQueryInfo.cs b/Tools/BLToolkit/DataAccess/SqlQueryInfo.cs
index 0eddf30..d7931d5 100644
--- a/Tools/BLToolkit/DataAccess/SqlQueryInfo.cs
+++ b/Tools/BLToolkit/DataAccess/SqlQueryInfo.cs
@@ -83,7 +83,7 @@ namespace BLToolkit.DataAccess
MapMemberInfo mmi = info.MemberMapper.MapMemberInfo;
object val = info.MemberMapper.GetValue(obj);
- if (val == null && mmi.Nullable && mmi.NullValue == null)
+ if (val == null && mmi.Nullable /* && mmi.NullValue == null */)
{
//replace value with DbNull
val = DBNull.Value;
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Здравствуйте, Clerk, Вы писали:
попробуйте так:
C>В BLToolkit заведён класс:
C> [TableName("TEST123")]
C> public abstract class Test123
C> {
C> [MapField("WEBAPP_ID"), PrimaryKey(0)]
C> public abstract int Id { get; set; }
C> [MapField("DD_AMOUNT"), NullValue((double)0), Nullable DbType(DbType.Currency)]
C> public abstract double DirectDebitAmount { get; set; }
C> }
C>
Здравствуйте, ili, Вы писали:
Не помогает:
exec sp_executesql N'INSERT INTO [TEST123]
(
[WEBAPP_ID],
[DD_AMOUNT]
) VALUES (
@WEBAPP_ID_P,
@DD_AMOUNT_P
)',N'@WEBAPP_ID_P int,@DD_AMOUNT_P money',@WEBAPP_ID_P=3,@DD_AMOUNT_P=default
ili>попробуйте так:
C>>В BLToolkit заведён класс:
C>> [TableName("TEST123")]
C>> public abstract class Test123
C>> {
C>> [MapField("WEBAPP_ID"), PrimaryKey(0)]
C>> public abstract int Id { get; set; }
C>> [MapField("DD_AMOUNT"), NullValue((double)0), Nullable DbType(DbType.Currency)]
C>> public abstract double DirectDebitAmount { get; set; }
C>> }
C>>
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>