У меня есть общий корень Администрации.Администрация объекта имеет отношение 1 к многим с формами.У форм есть то, что ЗАКРЫТЬ, чтобы быть отношением многие ко многим с модулями, однако в ссылке есть свойство, поэтому я создал объект отображения с именем FormModule, у которого есть свойство для целого числа Sequence.
IЯ искал настройки конфигурации Cascade & Inverse, но я не могу найти правильную комбинацию, которая позволит мне сохранить новый объект Administration со всеми его зависимыми объектами.Я использую составной ключ в таблице FormModule, но KeyReference, похоже, не имеет никаких средств для его установки для сохранения модулей, и я получаю сообщение об ошибке
объект ссылается нанесохраненный временный экземпляр - сохраните временный экземпляр перед сбросом или задайте каскадное действие для свойства, которое сделает его автоматически сохраненным.Тип: Модуль
Вот код для классов
public class Administration
{
public virtual int AdministrationId { get; protected set; }
protected IList<Form> _forms = new List<Form>();
public virtual IList<Form> Forms
{
get { return _forms; }
}
}
public class Form
{
public virtual int Id { get; set; }
public virtual Administration AdminKey { get; protected set; }
protected IList<FormModule> _formModules = new List<FormModule>();
public virtual IList<FormModule> FormModules
{
get { return _formModules; }
}
}
public class Module
{
public virtual int Id { get; protected set; }
public virtual Administration AdminKey { get; protected set; }
protected IList<FormModule> _formModules = new List<FormModule>();
public virtual IList<FormModule> FormModules
{
get { return _formModules; }
}
}
public class FormModule
{
public virtual Form Form { get; protected set; }
public virtual Module Module { get; protected set; }
public virtual int Sequence { get; protected set; }
}
И вот код для конфигурации Fluent NHibernate
public class AdministrationMap : ClassMap<Administratio>
{
public AdministrationMap()
{
Id(x => x.Id)
.Column("AdministrationId")
.Not.Nullable()
.GeneratedBy.Identity();
HasMany(x => x.Forms)
.KeyColumn("AdministrationId")
.Cascade.All();
}
}
public class FormMap : ClassMap<Form>
{
public FormMap()
{
Id(x => x.Id)
.Column("FormId")
.Not.Nullable()
.GeneratedBy.Identity();
HasMany(x => x.FormModules)
.Cascade.All()
References(x => x.Administration).Column("AdministrationId").Not.Nullable();
}
}
public class ModuleMap : ClassMap<Module>
{
public ModuleMap()
{
Id(x => x.Id)
.Column("ModuleId")
.Not.Nullable()
.GeneratedBy.Identity();
HasMany(x => x.FormModules)
.Cascade.All();
//.Inverse() //try this;
References(x => x.Administration).Column("AdministrationId").Not.Nullable();
}
}
public class FormModuleMap : ClassMap<FormModule>
{
public FormModuleMap()
{
CompositeId()
.KeyReference(x => x.Form, "FormId")
.KeyReference(x => x.Module, "ModuleId");
Map(x => x.Sequence)
.Column("SequenceNumber");
//I've tried these
//References(x => x.Module).Column(FormModuleTable.Column.FormId).Not.Nullable().Cascade.All();
//References(x => x.Module).Column(FormModuleTable.Column.ModuleId).Not.Nullable();
}
}
Кто-нибудь видит, почему яполучаю эту ошибку?