je dois interroger l'entité Person
avec la propriété enum TargetBookingSystemType
Nhibernate entité de requête à la propriété enum
public class Person : EntityWithTypedId<PersonCompositeId>
{
public virtual string Key { get; set; }
public virtual TargetBookingSystemType TargetBookingSystemType { get; set; }
}
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
this.CompositeId(x => x.Id).KeyProperty(y => y.AccountName, "[AccountName]").KeyProperty(y => y.Domain, "[Domain]");
this.Table("Person");
this.Map(x => x.Key).Column("[Key]");
this.Map(x => x.TargetBookingSystemType).Column("[TargetBookingSystemType]");//.CustomType<TargetBookingSystemType>();
}
}
public enum TargetBookingSystemType
{
GoogleCalendarAPIv3 = 1,
MSExchange2007 = 2,
MSExchange2010 = 3,
MSExchange2013 = 4,
MSOnline = 5
}
CREATE TABLE [dbo].[Person](
[Domain] [varchar](3) NOT NULL,
[AccountName] [varchar](255) NOT NULL,
[Key] [varchar](255) NOT NULL,
[TargetBookingSystemType] [nvarchar](20) NULL
)
Je sais qu'une solution possible est de changer le type de la propriété à chaîne, mais comment puis-je obtenir qu'utiliser NHibernate Je peux avoir la propriété comme une énumération et obtenir toujours une requête réussie?
Essayé CustomType() mais pas de chance d'obtenir une erreur Input string was not in a correct format.
s'il vous plaît noter que la requête fonctionne quand je commente la ligne avec la cartographie de TargetBookingSystemType
EDIT:
I aimerait avoir un appel à DB et après ce filtrage le résultat basé sur l'énumération. Ce est la méthode avec la requête en utilisant NHibernate:
public IList<Domain.DomainObjects.Entities.Person> GetAllPersons()
{
IList<Domain.DomainObjects.Entities.Person> list = new List<Domain.DomainObjects.Entities.Person>();
string queryString = "select MR from Person MR";
return this.Session.CreateQuery(queryString).SetCacheable(true).SetCacheRegion("LongTerm").List<Domain.DomainObjects.Entities.Person>();
}
Comment puis-je obtenir la propriété ENUM dans le résultat aswell?
Vous devez utiliser un smallint comme type pour votre colonne, car les enums sont stockés par leur type sous-jacent (int). De même, si vous choisissez d'autoriser la valeur NULL, vous devez déclarer la propriété TargetBookingSystemType comme nulle. – Jehof
@Jehof merci de le remarquer! Il ne résoudra pas mon problème. – pandemic
Copie possible de [Comment mapper une énumération en tant que chaîne de nhibernate fluide?] (Https://stackoverflow.com/questions/503310/how-do-you-map-an-enum-as -string-in-fluent-nhibernate) –