Lorsque je charge une classe Task, la propriété Document est toujours nulle, bien qu'il y ait des données dans la base de données.
Classe de tâches :
public class Task
{
public virtual Document Document { get; set; }
Surcharge de la cartographie des tâches pour AutoPersistenceModel :
public void Override(AutoMap<Task> mapping)
{
mapping.HasOne(x => x.Document)
.WithForeignKey("Task_Id");
Comme vous pouvez le voir dans ce que NHProf dit être exécuté, la condition de jointure est erronée, le WithForeignKey ne semble pas avoir d'effet. En fait, je peux écrire n'importe quelle chaîne dans le code ci-dessus et cela ne fait aucune différence.
FROM [Task] this_
left outer join [Document] document2_
on this_.Id = document2_.Id
Il devrait l'être :
FROM [Task] this_
left outer join [Document] document2_
on this_.Id = document2_.Task_Id
Si je pirate les données dans la base de données pour que les identifiants correspondent, les données sont chargées, mais c'est évidemment incorrect - mais au moins cela prouve que les données sont chargées.
Edit : en fouillant dans la source de fluent nhib pour trouver le XML, on obtient ceci :
<one-to-one foreign-key="Task_Id" cascade="all" name="Document" class="MyProject.Document, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
Edit : voici le schéma :
CREATE TABLE [dbo].[Document](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Task_Id] [int] NOT NULL,
CREATE TABLE [dbo].[Task](
[Id] [int] IDENTITY(1,1) NOT NULL,
Quelqu'un a-t-il une idée ?
Remerciements
Andrew