Я пробовал много разных конфигураций сопоставления, но продолжаю генерировать исключения или создавать / обновлять неправильную запись.
Исключения
- Невозможно вставить явное значение длястолбец идентификатора в таблице
- Невозможно использовать генерацию ключа столбца идентификатора с сопоставлением подкласса объединения
- пустой идентификатор, сгенерированный для класса XXX
Когда у меня есть картаЭто спасает, у меня есть следующая проблема
Я успешно вставил и обновил записи в базе данных, но эти записи не имеют соответствующего идентификатора.Все они имеют 0 для идентификатора и поэтому обновляют одну и ту же запись снова и снова.
Проблема, которую я пытаюсь решить
Я пытаюсь SubclassMap
интерфейс IRequest
.Этот интерфейс используется как свойство отдельного класса AbstractWorkflowRequestInformation
.При сохранении родительского класса я хочу сохранить ссылку IRequest
в соответствующей таблице подкласса.Это мое текущее отображение, которое генерирует исключение Cannot insert explicit value for identity column in table
.Я уверен, что я кое-что изменил в том, как я картирую отношения между этими двумя классами.Что я делаю неправильно?Мои карты ниже.
IRequestMap
public class IRequestMap : ClassMap<IRequest>
{
public IRequestMap()
{
Id(x => x.WorkflowRequestInformation)
.GeneratedBy.Foreign("AbstractWorkflowRequestInformation");
UseUnionSubclassForInheritanceMapping();
}
}
public class PlanRequestMap : SubclassMap<PlanRequest>
{
public PlanRequestMap()
{
Table("plan_request");
// specific to PlanRequest property mappings and references
}
}
public class BnjRequestMap : SubclassMap<BnjRequest>
{
public BnjRequestMap()
{
Table("scratchdb.guest.bnj_request");
// specific to BnjRequest property mappings and references
}
}
AbstractWorkflowRequestInformationMap
public class AbstractWorkflowRequestInformationMap :
ClassMap<AbstractWorkflowRequestInformation>
{
public AbstractWorkflowRequestInformationMap()
{
Table("workflow_request_information");
Id(x => x.Id)
.Column("workflow_request_information_id")
.GeneratedBy.Identity();
// more property mappings and references
References(x => x.SuperDuperRequest, "workflow_request_information_id")
.Class<IRequest>().Unique().Cascade.All();
// more property mappings and references
}
}