NHibernate mappage d'une entité sans clé primaire
Mon Entité n'a pas de clé primaire pour certaines raisons:
public partial class VehicleLocation
{
public virtual string UserCode { get; set; }
public virtual string DateTime { get; set; }
public virtual string Device { get; set; }
public virtual string Gps { get; set; }
public virtual string GpsDateTime { get; set; }
public virtual double Speed { get; set; }
}
La cartographie:
class VehicleLoactionMap : ClassMap<VehicleLocation>
{
public VehicleLoactionMap()
{
Table("VEHICLE_LOCATION");
LazyLoad();
Map(x => x.UserCode).Column("USER_CODE");
Map(x => x.DateTime).Column("DATE_TIME");
Map(x => x.Device).Column("DEVICE");
Map(x => x.Gps).Column("GPS");
Map(x => x.GpsDateTime).Column("GPS_DATE_TIME");
Map(x => x.Speed).Column("SPEED");
}
}
J'ai eu cette erreur:
L'entité "VehicleLocation' n'a pas un Id mappé...
Comment puis-je carte mon entité sans l'aide d'une clé primaire?
Quelle est la raison pour n'avoir pas PK? Si c'est simplement un cas de schémas de base de données que vous ne pouvez pas changer, alors vous aurez à regarder des clés composites (bien que cela va rendre les choses difficiles). Mais sinon, je ne vois pas une bonne raison pour ne pas avoir un PK, même si c'est seulement une clé de substitution. Mettre dans, votre NHibernate problème disparaît.
Travailler avec un pré-définis db schéma que je ne peux pas changer. Je ne peux pas ajouter/supprimer des clés/des champs.. dans ma db est cette table sans un PK et je suis en train de la carte comme vous pouvez le voir ci-dessus dans mon exemple de code.
Hélas, c'est une déception 🙁 j'irais avec la clé composite approches proposées ci-dessous, puis.
En effet, je suis en utilisant compo clés maintenant ça fonctionne. Merci à tous
Travailler avec un pré-définis db schéma que je ne peux pas changer. Je ne peux pas ajouter/supprimer des clés/des champs.. dans ma db est cette table sans un PK et je suis en train de la carte comme vous pouvez le voir ci-dessus dans mon exemple de code.
Hélas, c'est une déception 🙁 j'irais avec la clé composite approches proposées ci-dessous, puis.
En effet, je suis en utilisant compo clés maintenant ça fonctionne. Merci à tous
OriginalL'auteur Stacked | 2013-04-04
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème pendant un certain temps, mais après beaucoup de recherche j'ai trouvé qu'il n'est pas possible d'avoir des entités sans champ d'identifiant pour être mappé dans nHibernate.
Mais vous pouvez le faire en ayant les clés composites à la place d'identificateurs uniques. Bien que je n'ai pas essayé moi-même.
Ici est une réponse à une question similaire qui pourrait vous aider.
OriginalL'auteur mridula
Il n'y a pas moyen de faire ce que NHibernate nécessite un identifiant unique pour chaque entité. C'est parce que NHibernate nécessite un moyen de lier une ligne de données dans la table de base de données de l'entité. Si elle ne peut pas faire cela, alors il n'existe aucun moyen pour elle d'effectuer toute forme de persistance sur les données de l'entité.
Dans les situations où la table n'a pas une seule clé primaire, j'ai trouvé deux approches possibles pour le travail.
Utilisation d'une clé primaire composite.
Si votre SGBD prend en charge vous pouvez utiliser la physique de l'identificateur de ligne. SQL Server 2008 a
%%physloc%%
et Oracle aROWID
.Mais je voudrais vraiment pas recommander l'option 2 dans pratiquement n'importe quel scénario. C'est parce que le SGBD ne garantit pas que l'id de ligne reste la même sur la durée de vie de la ligne et est donc très fiable de la Clé Primaire.
%%physloc%%
est sans-papiers et les sons comme, généralement, une idée stupide. 1) la charge d'une entité avec une valeur donnée de%%physloc%%
2) indice de la maintenance: 3)%%physloc%%
différentes.Je suis d'accord à l'aide de %%physloc%% est une mauvaise idée dans 99,9% des cas. Mais parfois, lorsque l'on traite avec un héritage DB où il n'est pas possible de modifier le schéma c'est la seule option. Vous faites un très bon point bien donc je l'ai mis à jour ma réponse à la refléter
OriginalL'auteur mickfold
Facile de créer une clé composite.
Exemple de Code (VB):
OriginalL'auteur PaulG