Рассмотрим следующую иерархию классов:
public abstract class Entity
{
public virtual int Id { get; private set; }
}
public class ConfiguredBlockEntity : Entity
{
public virtual ScheduledGreetingEntity ScheduledGreeting { get; set; }
}
public abstract class ConfiguredVariableEditableBlockEntity
: ConfiguredBlockEntity
{
public virtual VariableEditableBlockEntity TemplateBlock { get; set; }
}
public class ConfiguredPhoneNumberBlockEntity
: ConfiguredVariableEditableBlockEntity
{
public virtual string PhoneNumber { get; set; }
}
Я использую функцию автоматического преобразования Fluent NHibernate.
Это создает следующую структуру таблицы:
create table "BlockEntity" (
Id INT IDENTITY NOT NULL,
ExecutionOrder INT null,
Name NVARCHAR(255) null,
BlockType NVARCHAR(255) null,
GreetingId INT null,
primary key (Id)
);
create table "ConfiguredBlockEntity" (
Id INT IDENTITY NOT NULL,
ScheduledGreetingId INT null,
primary key (Id)
);
create table ConfiguredPhoneNumberBlockEntity (
ConfiguredVariableEditableBlockId INT not null,
PhoneNumber NVARCHAR(255) null,
VariableEditableBlockId INT null,
primary key (ConfiguredVariableEditableBlockId)
);
alter table ConfiguredPhoneNumberBlockEntity
add constraint FK87F9EFC9BB9A4B52
foreign key (ConfiguredVariableEditableBlockId)
references "ConfiguredBlockEntity";
Есть некоторыепроблемы с этим результатом:
- В таблице
ConfiguredPhoneNumberBlockEntity
есть один столбец, который является первичным ключом и внешним ключом для базового класса в одном (столбец ConfiguredVariableEditableBlockId
. Это выглядит странно и не соответствуеткак я обычно проектирую свои таблицы. Если бы я проектировал таблицу вручную, в ней был бы столбец Id
, представляющий собой PK, и столбец ConfiguredBlockId
, представляющий собой FK. Можно ли как-то изменить это с помощью беглогоили автоматическое отображение? - Столбец PK / FK имеет имя
ConfiguredVariableEditableBlockId
, но таблицы ConfiguredVariableEditableBlock
не существует, поскольку это был абстрактный базовый класс, и его свойство было включено в таблицу ConfiguredPhoneNumberBlockEntity
. Этот столбец ссылается на таблицу ConfiguredBlockEntity
и, следовательно, должен иметь соответствующее имя. Как это исправить в беглом или автоматическом отображении?