Hello everyone.
I try to read from database decimal value, which has more than 18 digits in it's integer part and get this exception:
System.OverflowException : Conversion overflows.
at System.Data.SqlTypes.SqlDecimal.ToDecimal()
at Xtensive.Sql.Drivers.SqlServer.v09.TypeMapper.ReadDecimal(DbDataReader reader, Int32 index)
at Xtensive.Orm.Providers.DbDataReaderAccessor.Read(DbDataReader source)
at Xtensive.Orm.Providers.Command.<AsReaderOf>d__0.MoveNext()
at Xtensive.Orm.Providers.SqlSessionHandler.<Xtensive.Orm.Providers.IProviderExecutor.ExecuteTupleReader>d__2.MoveNext()
at Xtensive.Orm.Providers.SqlProvider.<OnEnumerate>d__9.MoveNext()
at Xtensive.Orm.Rse.Providers.ExecutableProvider.<GetEnumerator>d__0.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList(IEnumerable`1 source)
at Xtensive.Orm.Rse.RecordSet.<GetGreedyEnumerator>d__0.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at Xtensive.Core.EnumerableExtensions.<Batch>d__20`1.MoveNext()
at Xtensive.Core.EnumerableExtensions.<ApplyBeforeAndAfter>d__28`1.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext()
at System.Linq.Enumerable.First(IEnumerable`1 source)
at Xtensive.Core.DelegateBindExtensions.<>c__DisplayClassd`6.<Bind>b__c(T2 arg2, T3 arg3, T4 arg4, T5 arg5)
at Xtensive.Orm.Linq.QueryProvider.Execute(Expression expression)
at System.Linq.Queryable.First(IQueryable`1 source)
I expect that if I could write this value to database, I can read it. This is simple example how to reproduce this error
using System;
using System.Linq;
using NUnit.Framework;
using Xtensive.Orm;
using Xtensive.Orm.Configuration;
[TestFixture]
public class Test
{
[Test]
public static void TestMethod()
{
var connectionString = "Data Source=.; Initial Catalog=TestDb; Integrated Security=True;";
var connectionInfo = new ConnectionInfo("sqlserver", connectionString);
var cfg = new DomainConfiguration(connectionInfo);
cfg.UpgradeMode = DomainUpgradeMode.Recreate;
cfg.Types.Register(typeof(TestEntity).Assembly);
var domain = Domain.Build(cfg);
using (var s = domain.OpenSession())
{
using (s.Activate())
{
using (var tr = s.OpenTransaction())
{
var entity = new TestEntity(Guid.NewGuid()) { field = 111111111111111111.000000m };
tr.Complete();
}
using (var tr = s.OpenTransaction())
{
var entity = Session.Current.Query.All<TestEntity>().First();
tr.Complete();
}
}
}
}
}
[HierarchyRoot]
[Serializable]
public class TestEntity : Entity
{
public TestEntity(Guid id) : base(id)
{
}
[Field]
[Key]
public Guid Id { get; private set; }
[Field(Precision = 24, Scale = 6)]
public decimal field { get; set; }
}
asked
Mar 19 '13 at 03:17
Maxim Kornev
5●1●1●1
Hello Maxim, this is known issue unfortunately. We have plans to fix it, however there is no estimate at the moment.