У меня проблемы с отображением базы данных с использованием Fluent NHibernate. База данных, над которой я работаю, коричневая, и некоторые отношения плохо реализованы.
Сопоставление, которое я пытаюсь сделать, описывается в следующих таблицах:
+----------+ +----------+ +---------------+ +-------------------+
| ToolA | | ToolB | | ToolPurpose | | ToolInstruction |
+==========+ +==========+ +===============+ +===================+
| ToolA_Id | | ToolB_Id | | Purpose_Id | | ToolInstruction_Id|
| Name | | Name | | ToolA_Id | | Purpose_Id |
+----------+ +----------+ | ToolB_Id | | Instruction |
| Purpose | +-------------------+
+---------------+
Я хочу сопоставить таблицу ToolA с таблицей ToolInstruction, чтобы получить такой класс, как:
public class ToolA
{
public virtual int _ToolA_id { get; set; }
public virtual string _Name { get; set; }
public virtual string _Instruction { get; set; }
}
OR
public class ToolA
{
public virtual int _ToolA_id { get; set; }
public virtual string _Name { get; set; }
public virtual ToolInstruction _ToolInstruction{ get; set; }
}
public class ToolInstruction
{
public virtual string _Instruction { get; set; }
}
Я думаю, что вызывает у меня затруднение то, что в таблице ToolPurpose есть строка для каждой записи ToolA и ToolB, так что для записи ToolA ToolB_Id равен нулю и наоборот.
Например:
+--------------------------------------------------+
|Purpose_Id | ToolA_Id | ToolB_Id | Purpose |
|===================================================
|1 | 1 | null | "purpose here" |
|2 | null | 1 | "purpose here" |
+--------------------------------------------------+
Я попробовал несколько подходов к этому, и они показали признаки работы при использовании метода PersistenceSpecification.VerifyTheMappings (), но не при попытке извлечь данные из резервной базы данных, потому что я начинаю сталкиваться с исключениями нулевых ссылок.
Я попытался отобразить ToolPurpose как класс компоновщика, и я попытался отобразить его с помощью метода Join в классе отображения ToolA. Я также чередовал использование HasOne и HasMany, чтобы увидеть, какой из них подходит.
Я надеюсь, что кто-то может указать мне правильное направление, изложив, как они это сделают или увидят какие-то проблемы с точки зрения того, как я к нему подхожу.