Эй, ребята, у меня есть некоторые реальные проблемы с отображением с использованием беглого nhibernate.Я понимаю, что на этом сайте и многих других есть много постов, посвященных определенным типам картирования, но пока я не нашел решения, которое решает мою проблему.
Вот что у меня есть:
namespace MyProject.Models.Entites
{
public class Project
{
public virtual Guid Id {get; set;}
// A load of other properties
public virtual ProjectCatagory Catagory{get;set;}
}
}
, а затем карта:
namespace MyProject.DataAccess.ClassMappings
{
public class ProjectMap : ClassMap<Project>
{
public ProjectMap()
{
Id(x => x.Id);
Map(x => x.Title);
Map(x => x.Description);
Map(x => x.LastUpdated);
Map(x => x.ImageData).CustomSqlType("image");
HasOne(x => x.Catagory);
}
}
}
Итак, как вы можете видеть, у меня есть проект, который содержит свойство категории.Я не очень разбираюсь в реляционных базах данных, но, насколько я могу судить, это отношения «многие-один», когда у многих проектов может быть одна категория.Нет, проекты не могут быть отнесены к более чем одной категории.
Итак, теперь у нас есть:
namespace MyProject.Models.Entities
{
public class ProjectCatagory
{
public virtual Guid Id { get; set; }
public virtual String Name { get; set; }
}
}
и его карта:
public ProjectCatagoryMap()
{
Id(x => x.Id);
Map(x => x.Name);
}
Проблема в том, что этоне работает!В модульном тесте я сделаю что-то похожее на следующее:
Project myproject = new Project("Project Description");
// set the other properties
myProject.Catagory = new ProjectCatagory(Guid.New(), "Test Catagory");
repository.Save(myProject);
Теперь я попробовал несколько картографических конфигураций и конфигураций базы данных, пытаясь заставить это работать.В настоящее время в таблице базы данных Project есть столбец "Catagory_id" (который я не поместил туда, я предполагаю, что NH добавил его в результате сопоставления), и мне хотелось бы, чтобы он был установлен, чтобы не допускать нулевые значения.Однако, когда он установлен как таковой, я получаю исключения, объясняющие, что я не могу вставить нулевые значения в таблицу (хотя во время отладки я проверил все свойства объекта Project, и они НЕ являются нулевыми).
В качестве альтернативы, я могу разрешить таблице принимать пустые значения в этом столбце, и она просто сохранит объект Project и полностью игнорирует свойство Category при сохранении, поэтому при получении проверяет, имеет ли правильная категориябыло связано с неудачей проекта.
Если я правильно помню, в какой-то момент у меня было использование ProjectMap:
References(x => x.Catagory).Column("Catagory_id").Cascade.All().Not.Nullable();
это изменило исключение из "Не могу вставить нулевые значения" в чужойКлючевое нарушение.
Я подозреваю, что корень всех этих проблем возникает из-за моего непонимания настройки реляционной базы данных, так как у меня есть другие объекты в этом проекте, у которых нет внешних зависимостей, которые работают совершенно нормально с управлением NHibernate.любые проблемы с кодированием, которые я мог вызвать при создании хранилища.
Любая помощь с благодарностью.Спасибо.