2010-08-24 6 views
0

J'ai une table SalesOrder et une table d'adresses distincte. Le SalesOrder a deux adresses - évitant ainsi l'utilisation d'une liste, il y a l'adresse Delivery et Invoice. Voilà comment ils ont été cartographiés dans le fichier de mappage SalesOrder:NHibernate/SQL Server plusieurs clés étrangères à la même table ... Possible?

<many-to-one name="DeliveryAddress" class="Address" column="`DeliveryAddressGUID`" /> 
<many-to-one name="InvoiceAddress" class="Address" column="`InvoiceAddressGUID`" /> 

Est-il vraiment possible d'avoir cette relation - où deux champs distincts dans la même référence de table une autre. Si je supprime une des associations « many-to-one », je peux ajouter une adresse à la table, sinon, si je garde les deux associations que je reçois l'exception suivante:

"The UPDATE statement conflicted with the FOREIGN KEY constraint \"FK67C9F3E2FBD32E03\". The conflict occurred in database \"Dispatch\", table \"dbo.Address\", column 'GUID'.\r\nThe statement has been terminated." 

Est-ce que je fais quelque chose de mal?

Merci

Modifier Ce sont les parties pertinentes des deux tables:

SalesOrder 
------------ 
Guid 
DeiveryAddressGuid 
InvoiceAddressGuid 
... 

Address 
------------ 
Guid 
HouseNameOrNumber 
AddressLine1 
AddressLine2 
... 

L'erreur est vraiment étrange car il ajoutera ne me laisse pas simplement une adresse à la table d'adresses par lui-même avec les deux clés étrangères actives (ceci est dans NHibernate, je n'ai pas pu tester cela directement avec SQL Server).

+0

pouvez-vous nous montrer à quoi ressemblent les deux tables? Autant que je sache, vous devriez être en mesure d'avoir plusieurs clés étrangères de référence à une autre table. – DForck42

+0

Merci pour votre réponse. Je vous ai ajouté des informations pour vous, cela semble toujours être un problème lorsque vous ajoutez simplement une adresse seule lorsque l'association est active. –

Répondre

1

avez-vous vérifié pour vous assurer que ces deux entrées étaient dans la table parente?

+0

Je supposais que la cascade faisait déjà cela, évidemment pas. Merci de votre aide. –

+0

Parfois, ce sont les choses les plus simples. – DForck42

Questions connexes