Je travaille sur la mise en place d'une simple application POC en utilisant Fluent NHibernate pour essayer de montrer qu'elle peut faire tout notre outil d'accès aux données actuel et bien plus encore. L'un des cas marginaux que mon patron s'inquiète est la possibilité d'accéder à plusieurs schémas dans la même base de données en une seule requête. Jusqu'à présent, j'ai pu extraire des données de tables dans les deux schémas tant que la requête ne touche qu'un seul schéma à la fois. Si j'essaie d'exécuter une commande qui rejoindra les tables des deux schémas, cela explosera. Sur la base des messages d'erreur que je vois, je ne crois pas que le problème est avec la jointure à travers les schémas, mais plutôt avec le fait que les deux champs dont j'ai besoin pour joindre les tables sont tous les deux non-clés des champs. La structure de la table deux est quelque chose comme ceci:Joignez-vous entre deux champs non-clés
Customer (in schema 1) -------- int CustomerId (Primary Key) string Name ...other fields Order (in schema 2) -------- int OrderId (primary key) string CustomerName ...other fields
l'aide de sql directement je peux rejoindre sur le nom/champs CustomerName et obtenir les données des deux tables. Cependant, en utilisant NHibernate, je continue à obtenir une "System.FormatException: la chaîne d'entrée n'était pas dans un format correct" lorsque vous essayez d'extraire des données de la table Order et d'inclure des données de la table Customer. Cela m'amène à croire que NHibernate essaie de se joindre au champ CustomerName et au champ CustomerId.
Je sais comment lui dire d'utiliser le champ CustomerName dans mon mappage d'ordre, mais je ne peux pas trouver un moyen de dire à rejoindre sur le champ Nom de la table client.
Mes Mappages ressemblent à ceci:
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
Id(x => x.Id)
.Column("CustomerId");
Map(x => x.Name);
}
}
public class OrderMap : ClassMap<Order>
{
public OrderMap()
{
Schema("schema2");
Id(x => x.Id)
.Column("OrderID");
Map(x => x.CustomerName)
.Column("CustomerName");
References<Customer>(x => x.Customer, "CustomerName");
}
}
SQL j'écrire pour obtenir les résultats que je veux serait quelque chose comme:
select o.OrderId, o.CustomerName, c.CustomerId
from order o
inner join customer c on c.Name = o.CustomerName
Est-ce même possible? Existe-t-il une façon différente/meilleure de s'y prendre?
Merci! C'est ce qu'il a fait. J'avais essayé individuellement 'Column' et 'PropertyRef', mais je n'ai pas pensé à les essayer ensemble pour une raison quelconque. – Hamman359
Super, c'est exactement ce que je cherchais. Vous pouvez également bénéficier d'un typage fort avec votre paramètre PropertyRef en utilisant plutôt lambdas, c'est-à-dire PropertyRef (x => x.Name). Cela signifie qu'il ne se cassera pas si vous refactorisez votre classe de client. – nukefusion
Cela a aidé même avec un à plusieurs! :) – Turowicz