2015-11-30 1 views
-1

Je construis une application WPF. J'ai fait ma base de données en utilisant Code-First.EntityFramework pence à livres

J'ai besoin d'insérer les prix des articles en pence (par exemple 500), mais lorsque les prix seront affichés, ils devraient être en livres (5,00).

J'ai essayé de faire la « conversion » dans le poseur de ma propriété

public decimal Price 
{ 
    get { return price; } 
    set { price = value/100 ;} 
} 

Mais, pour une raison quelconque, quand je laisse tomber manuellement la base de données, les valeurs de mon ListView sont montrées quelques fois comme 0, 05 et d'autres fois comme 500,00. Quelque chose doit être faux avec cette méthode.

Comment puis-je dire à ma base de données de considérer les 2 derniers chiffres de ma valeur comme décimaux?

+1

Vous ne devriez pas effectuer de telles conversions dans votre modèle. Le bon endroit pour de telles choses est votre ViewModel. –

+0

@IvanStoev Pourriez-vous s'il vous plaît expliquer? Je suis un débutant – Koosshh56

+0

C'est trop gros pour être expliqué ici. Recherche de modèle MVVM (fortement utilisé dans WPF) –

Répondre

1

Vous pourriez vouloir essayer quelque chose comme ça

public class YourClassName { 
    public decimal Price { get; set; } 

    [NotMapped] 
    public decimal Pounds => Price/100; 
} 
+0

Qu'est-ce que '0? 0'? – Koosshh56

+0

c'est équivalent à if (Pence == 0) Pounds = 0 sinon Pounds = Pence/100; – MutantNinjaCodeMonkey

+0

Mais le prix est une propriété de mon article de classe. Vous faites une classe distincte pour le prix – Koosshh56

0

Dans Entity Framework, la valeur retournée par le « getter » est ce qui sera stocké dans la base de données. Par conséquent, tout ce que vous définissez sur cette propriété va être valeur/100.

Ce que vous voulez faire est d'établir une manière standard que vous voulez stocker la devise. Probablement dans ce cas, "Pence" est le meilleur, et je re-mot la propriété pour le rendre auto-documentant (et supprimer la division).

public decimal PriceInPence 
{ 
    get { return price; } 
    set { price = value;} 
} 

Ensuite, je fournir une méthode pour obtenir les livres:

public decimal GetPriceInPounds() 
{ 
    return price == 0m ? 0m : price/100m; 
} 

Si vous utilisez le modèle MVVM comme par insinué un de vos commentaires de question, vous auriez alimenter la vue modèle avec des appels à GetPriceInPounds().