Qui .NET type de données est le meilleur pour la cartographie du NOMBRE de données Oracle type dans NHibernate?
J'ai vu quelques exemples dans lesquels decimal
est utilisé dans NHibernate projets pour la cartographie d'ensemble du nombre de colonnes dans Oracle. Actuellement, j'utilise int
et long
dans mon programme.
Quels sont les avantages de decimal
sur int
/long
? Est-il mieux performer?
- Qu'entendez-vous par "Quels sont les avantages de la virgule sur int/long? Est-il mieux performer?", les décimales ne sont pas des nombres entiers tels que int/long...
- Cependant, un nombre décimal peut représentent un nombre entier, et j'ai vu
decimal
utilisé à la place deint
/long
dans divers exemples. J'essaie juste de comprendre pourquoi.
Vous devez vous connecter pour publier un commentaire.
C'est probablement parce que .NET
decimal
et OracleNUMBER
des cartes un peu mieux quelong
etNUMBER
et il vous donne également plus de flexibilité. Si, à un stade ultérieur ajouter un échelle dans l'Oracle de la colonne puis tu n'aurais pas à changer de type de données si vous avez déjà utilisédecimal
.decimal
est certainement plus lent queint
etlong
depuis les deux versions ultérieures sont pris en charge par le matériel. Cela dit, vous devez rassembler montant considérable de données pour faire une différence. Je pense toujours que vous devez utiliserlong
si ce que vous avez à traiter avec, puis vous devriez également le tableau des définitions de colonne représentent qu'.NUMBER(18,0)
pourlong
et ainsi de suite.La raison
decimal
cartes un peu mieux, c'est quelong
est de 64 bits etdecimal
est (un peu) de 128 bits..NET
Oracle
NUMBER
par défaut à 38 chiffres significatifs et une échelle de 0 (entier).Microsoft est conscient du problème et notes
Venez pour penser à elle vous avez réellement besoin
BigInteger
pour être en mesure de représenter le même nombre de chiffres significatifs à ce queNUMBER
par défaut. Je n'ai jamais vu personne le faire et je suppose que c'est un très rare de besoin. AussiBigInteger
n'est pas coupé depuisNUMBER
peuvent être positifs et négatifs de l'infini.Oracle.ManagedDataAccess.Types.OracleDecimal
comme évoqué dans docs.oracle.com/cd/B28359_01/win.111/b28375/featTypes.htm - IIRC travaille avec Nombre(38) et les poignées de +/-INF cas.double
est mappé àDOUBLE PRECISION
,int
est toujours associée àNUMBER(10,0)
etdecimal
peut être mappé à unNUMBER(x,y)
selon le.Precision(x).Scale(y)
paramètres. Par la voie, chaning la.Precision
deint
ne pas modifier le mappage - il est toujoursNUMBER(10,0)
. Et d'ailleurs, ce n'est pas la réponse à ma question.Devart
, j'ai lu la réponse suivante, qui décrivent la CSDL types de mapping entre Oracle et .Net .devart.com/forums/viewtopic.php?t=15604int32
(max = 2,147,483,647)
vous avez besoin d'unNUMBER(10,0)
. Si vous voulez lire unNUMBER(10,0)
(max = 9,999,999,999)
vous avez besoin d'unlong
. Depuis les limites de suivre des concepts complètement différents, il n'y a pas moyen de contourner cela. Vous devez savoir d'où proviennent les données, et peut-être utiliser d'autres db contraintes.