Comment enregistrer enum dans la base de données sous forme de chaîne
C'est mon Modèle de Classe où nous avons un Type qui pourrait être un Zombie ou de l'Homme
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public Type Type { get; set; }
public List<Wepon> WeposInList { get; set; }
}
public enum Type
{ [Description("Zombie")] Zombie,
[Description("Human")] Human
}
Actuellement, il est l'enregistrement de données en Int
Je veux enregistrer les données de l'Homme et de Zombie, pas avec int
source d'informationauteur Agha
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce problème aussi loin que je me souvienne, et honnêtement, je ne sais pas pourquoi ils n'ont pas MS l'ajout de cette fonctionnalité (NH pouvez le faire comme depuis toujours..).
Toute façon, ce que je fais habituellement est de les utiliser const chaînes de classes comme:
Contre - aussi simple que peut l'être.
Inconvénients - vous perdre la vérification de type (même si elle pourrait être appliquée par programmation).
Cette fois, j'ai essayé de penser à quelque chose de plus ambitieux. J'ai donc pris le concept décrit par Brian (qui a quelques inconvénients quand par exemple un enum est utilisé largement dans le domaine). Et bien.. j'ai eu de travail suivants:
Un composant de base de la classe pour stocker les valeurs:
... qui serait fondamentalement suffisant.. sauf EF ne prend pas en charge les types génériques...
Cela signifie que pour chaque enum vous devez avoir quelque chose comme...
Qui vous donne une chaudière de la plaque, qui pourrait être facilement généré par ex. à l'aide de modèles T4.
Qui se termine finalement avec l'aide de:
Mais puisque vous avez une conversion implicite en place, les déclarations de classe sont les seuls à être au courant de l'aide de types.
Vous pouvez économiser de l'enum de la db comme une chaîne de caractères, et je suis d'accord avec dotctor que ce n'est pas la meilleure idée, mais si vous en avez besoin, vous avez besoin de faire quelques changements.
Ajouter cette extension de la classe à votre projet.
Tous les détails sont ici - http://NoDogmaBlog.bryanhogan.net/2014/11/saving-enums-as-strings-with-entity-framework/
Ce n'est pas une bonne idée de les stocker sous forme de chaîne de caractères, mais vous pouvez créer des tables pour vos énumérations avec ef enum pour la recherche de et il est très facile à utiliser.
J'chose, que c'est beaucoup plus utile de les stocker en tant que
int
parce que vous pouvez ensuite lancer leint
de DB très facilement à laenum
.Mais si ce que vous désirez, il y a deux approches. Vous pouvez enregistrer
Type.Zombie.ToString()
(ouType.Human.ToString()
respectivement) à la base de données (qui sera "Zombie"), ou vous pouvez obtenir la valeur deDescriptionAttribute
que vous utilisez et de l'enregistrer dans la bd. Comment obtenir la description est décrit ici. - Il sera également à la "Zombie" dans ce cas, mais il peut être tout ce que vous écrivez dans leDescription()
.Si vous utilisez
ToString
vous pouvez ensuite utiliserEnum.Parse
pour obtenir l'instance de laenum
dos. Si vous utilisez la description, il n'est pas facile.