Une association de la table X fait référence à un mappage de classe: System.Guid
J'ai cette classe:
public class AttachmentLocation
{
#region properties
public virtual Guid UserId { get; set; }
public virtual Guid LocationId { get; set; }
public virtual long IndexInLocation { get; set; }
#endregion
#region contained foreign objects
public virtual Attachment Attachment { get; set; }
#endregion
#region Methods need to override for CompositeId
public override bool Equals(object obj)
{
if (obj == null)
return false;
var t = obj as AttachmentLocation;
if (t == null)
return false;
if (UserId == t.UserId && LocationId == t.LocationId && Attachment.Id == t.Attachment.Id)
return true;
return false;
}
public override int GetHashCode()
{
return (UserId + "|" + LocationId + "|" + Attachment.Id).GetHashCode();
}
#endregion
}
J'ai ce Fluide Cartographie:
public class AttachmentLocaionMap : ClassMap<AttachmentLocation>
{
public AttachmentLocaionMap()
{
Table("Metadata_AttachmentLocation");
CompositeId()
.KeyReference(x => x.UserId, "UserId")
.KeyReference(x => x.Attachment.Id, "AttachmentId")
.KeyReference(x => x.LocationId, "LocationId");
Map(x => x.IndexInLocation).Not.Nullable();
Map(x => x.LocationId).Not.Nullable();
HasOne(x => x.Attachment);
}
}
qui m'inscrire:
SessionFactory = Fluently.Configure(configuration).Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<AttachmentLocaionMap>();
m.FluentMappings.AddFromAssemblyOf<FriendDetailsMap>();
}).BuildSessionFactory();
J'obtiens cette erreur d'exécution:
Une association à partir de la table Metadata_AttachmentLocation se réfère à une
mappage de classe: System.GuidDescription: Une exception non gérée s'est produite lors de l'exécution de
la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'
informations sur l'erreur et où elle a son origine dans le code.Détails De L'Exception: NHibernate.MappingException: Une association de
le tableau Metadata_AttachmentLocation se réfère à un mappage de classe:
Système.GuidSource De L'Erreur:
Ligne 19: Ligne 20: Ligne 21: SessionFactory =
Couramment.Configure(configuration).Mappages(m => Ligne 22: {
Ligne 23:
m.FluentMappings.AddFromAssemblyOf();Fichier Source: C:\Users\elad\Documents\Visual Studio
2010\Projects\SVN\UGI\Ugi\Infrastructure\Dal\Cartes\NHibernateAdapter\NHibernateHelper.cs
Ligne: 21Trace De La Pile:
[MappingException: Une association de la table
Metadata_AttachmentLocation se réfère à un mappage de classe: System.Guid]
NHibernate.Cfg.La Configuration.LogAndThrow(Sauf exception) dans
d:\C # \NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:342
NHibernate.Cfg.La Configuration.SecondPassCompileForeignKeys(Table Table,
ISet fait)
d:\C # \NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:1169
NHibernate.Cfg.La Configuration.SecondPassCompile() dans
d:\C # \NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:1120
NHibernate.Cfg.La Configuration.BuildSessionFactory() dans
d:\C # \NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:1249
FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() dans
d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:227[FluentConfigurationException: Un invalide ou incomplète de configuration
a été utilisée lors de la création d'une SessionFactory. Vérifier PotentialReasons
collection, et InnerException pour plus de détails.
- De la base de données n'a pas été configuré par le biais de la Base de données de la méthode. ]
FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() dans
d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:232
Ugi.L'Infrastructure.Dal.Les adaptateurs.NHibernateAdapter.NHibernateHelper.OpenSession()
dans C:\Users\elad\Documents\Visual Studio
2010\Projects\SVN\UGI\Ugi\Infrastructure\Dal\Cartes\NHibernateAdapter\NHibernateHelper.cs:21
Ugi.L'Infrastructure.Dal.Les adaptateurs.NHibernateAdapter.NHibernateHelper.GetSession()
dans C:\Users\elad\Documents\Visual Studio
2010\Projects\SVN\UGI\Ugi\Infrastructure\Dal\Cartes\NHibernateAdapter\NHibernateHelper.cs:36
Ugi.L'Infrastructure.Dal.Les adaptateurs.NHibernateAdapter.NHibernateDal1..ctor()
1 resolverOverrides)
in C:\Users\elad\Documents\Visual Studio
2010\Projects\SVN\UGI\Ugi\Infrastructure\Dal\Adapters\NHibernateAdapter\NHibernateDal.cs:16
Ugi.Infrastructure.Dal.Adapters.NHibernateAdapter.NHibernateDalFactory.GetDal()
in C:\Users\elad\Documents\Visual Studio
2010\Projects\SVN\UGI\Ugi\Infrastructure\Dal\Adapters\NHibernateAdapter\NHibernateDalFactory.cs:17
Ugi.Server.Sources.Logic.SourcesService..ctor() in
C:\Users\elad\Documents\Visual Studio
2010\Projects\SVN\UGI\Ugi\Server\Sources\Logic\SourcesService.cs:36
BuildUp_Ugi.Server.Sources.Logic.SourcesService(IBuilderContext ) +153
Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext
context) in
c:\EntLib\UnityTemp\Compile\Unity\Unity\Src\ObjectBuilder\Strategies\BuildPlan\DynamicMethod\DynamicMethodBuildPlan.cs:37
Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext
context) in
c:\EntLib\UnityTemp\Compile\Unity\Unity\Src\ObjectBuilder\Strategies\BuildPlan\BuildPlanStrategy.cs:43
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext
context) in
c:\EntLib\UnityTemp\Compile\Unity\Unity\Src\ObjectBuilder\Strategies\StrategyChain.cs:110
Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object
existing, String name, IEnumerable
c:\EntLib\UnityTemp\Compiler\Unité\Unité\Src\UnityContainer.cs:512[ResolutionFailedException: la Résolution de la dépendance à l'échec, type
= "Ugi.Commun.De modèle.Des Sources.ISourcesService", nom = "(aucun)". Exception s'est produite lors: l'Appel de constructeur
Ugi.Serveur.Des Sources.La logique.SourcesService(). Exception est la suivante:
FluentConfigurationException - Un invalide ou incomplète de configuration
a été utilisée lors de la création d'une SessionFactory. Vérifier PotentialReasons
collection, et InnerException pour plus de détails.
- De la base de données n'a pas été configuré par le biais de la Base de données de la méthode.
Comment puis-je régler ce problème?
TIA
OriginalL'auteur Elad Benda | 2011-11-26
Vous devez vous connecter pour publier un commentaire.
Ce sont de faux:
Et donc sont ces:
Vous devriez avoir de références correctes:
Et de la cartographie:
simple properties
etcontained foreign objects
. N'est-ce pas possible? Ces 3 type primitif composer compositeId. Je ne veux pas faire référence à toutes les 3, seuls les PK de deux d'entre eux et de référence de la troisième. cann-je pas ?ce n'est pas la bonne façon de structurer les relations. Vous pouvez toujours accéder à
Attachment.Id
, qui vous donnera à la pièce Jointe d'identité sans la nécessité pour les charger à partir de la DB.pouvez-vous expliquer votre dernier commentaire? Comment l'Attachement.Id seront remplies si l'ensemble de la pièce Jointe obj ne sera pas rempli de la DB?
désolé, je n'ai même pas regarder votre cartographie. viens de voir le message sur la Base de données de la méthode et descendit d'un tout autre chemin. diego est à droite sur ce sujet, mais je ne pense pas que le nettoyage de cette volonté de résoudre votre problème. peut-être que je me trompe à ce sujet, cependant. il parle chargement paresseux. le référencement d'un mappé entité charge dynamique proxy plutôt que l'objet lui-même. la procuration sera de retour l'id sans charger l'ensemble de l'objet. c'est seulement si vous avez accès à un bien autre que de l'id que nhibernate va à la base de données pour obtenir l'ensemble de l'objet.
est essentiellement de droite. C'est la façon dont les procurations de travail dans NH, qui permet l'existence de la
Load
méthode, et une des raisons pour lesquelles NH est plus puissant que l'EF.OriginalL'auteur Diego Mijelshon
Si vous voulez mapper des propriétés simples dans une clé composite (c'est pas une "norme" de rapporter des choses avec un ORM, mais dans certains cas, il pourrait vous aider) vous pouvez connecter la clé à l'aide de KeyProperty au lieu de KeyReference de cette façon:
OriginalL'auteur Daniele Armanasco
Votre Attachmentmodel référencer correctement AttachmentLocation ainsi? Si non, vous voudrez peut-être essayer de Références() au lieu de HasOne
OriginalL'auteur MK_Dev
mon couramment configuration ressemble à ceci à la place:
de ce que vous avez
je ne suis pas sûr de ce qui est censé être différent à la surcharge de travail pour le configurer, mais étant donné le message de ne pas se servir de la Base de données de la méthode, j'imagine que cela permettrait de résoudre le problème pour vous.
je me demande si nous sommes en utilisant différentes versions de nhibernate fluent. je suis sur 1.2.0.712. je vois de la Base de données() avec des surcharges de Func<IPersistenceConfigurer>, et IPersistenceConfigurer. pensez qu'il devrait travailler avec le dernier de ceux-ci.
en fait, en regardant de nouveau, je pense que votre configuration de l'objet et le mien sont différents. je suis entrain de créer le mien avec:var configuration = MsSqlConfiguration.MsSql2008 .IsolationLevel(IsolationLevel.ReadCommitted) .ConnectionString(connectionString) .DefaultSchema(defaultSchema) .FormatSql(); ce qui conduit à un type de FluentNhibernate.Cfg.Db.MsSqlConfiguration (qui a un type de base de PersistenceConfiguration). ressemble à la vôtre est à venir à partir de NHibernate au lieu de fluent. qui doit être là la différence entre l'utilisation de Configurer la configuration avec vs (Base de données).
OriginalL'auteur Dave Rael