От меня исходит отчетливый запах сгоревших цепей, так что прости мое невежество.
Я пытаюсь установить отношение один-к-одному (ну, пусть Automapper сделает это) в S#arp Architecture.
У меня есть
public class User : Entity
{
public virtual Profile Profile { get; set; }
public virtual Basket Basket { get; set; }
public virtual IList<Order> Orders { get; set; }
public virtual IList<Role> Roles { get; set; }
...
}
public class Basket : Entity
{
public virtual User User { get; set; }
...
}
public class Profile : Entity
{
public virtual User User { get; set; }
...
}
И моя схема базы данных
CREATE TABLE [dbo].[Users](
[Id] [int] IDENTITY(1,1) NOT NULL,
...
CREATE TABLE [dbo].[Profiles](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserFk] [int] NULL,
...
CREATE TABLE [dbo].[Baskets](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserFk] [int] NULL,
...
Когда я запускаю модульный тест CanConfirmDatabaseMatchesMappings в MappingIntegrationTests, я получаю следующую ошибку
NHibernate.ADOException: не удалось выполнить запрос ... System.Data.SqlClient.SqlException: недопустимое имя столбца 'ProfileFk'.Неверное имя столбца 'BasketFk'.
и sql, который он пытается выполнить, это
SELECT TOP 0
this_.Id AS Id6_1_ ,
..
user2_.ProfileFk AS ProfileFk9_0_ ,
user2_.BasketFk AS BasketFk9_0_
FROM
Profiles this_
LEFT OUTER JOIN Users user2_
ON this_.UserFk = user2_.Id
Так что он ищет поля ProfileFk и BasketFk в таблице Users.Я не настроил никаких сопоставлений переопределения клиентов, и, насколько я вижу, я следовал настройке соглашений по умолчанию в S #.
Два других сопоставления для заказов и ролей IList, похоже, отображаются нормально.Поэтому я предполагаю, что что-то упустили из-за установления отношений один-к-одному.
Чего мне не хватает?