Я пытаюсь создать однонаправленное сопоставление обязательных отношений (один-к-нулю-одному) с использованием Entity Framework версии 6. Но до сих пор я не смог настроить его с помощьюсвободно API, или найти правильную документацию о том, как.
Таблица event
(основной) имеет составной первичный ключ.Таблица event_autostart
(зависимая) ссылается на эту таблицу.
В отображении оба имени столбца необходимо будет установить вручную, поскольку имена не соответствуют тому, что EF6 установил бы по умолчанию.
Желаемая структура базы данных выглядит следующим образом:
CREATE TABLE `event` (
`id` INTEGER NOT NULL,
`name` TEXT NOT NULL,
`license_key` TEXT,
PRIMARY KEY(`id`,`license_key`)
);
CREATE TABLE `autostart_event` (
`license_key` TEXT NOT NULL,
`event_id` INTEGER NOT NULL,
PRIMARY KEY(`license_key`),
FOREIGN KEY(`license_key`) REFERENCES `event`(`license_key`) ON UPDATE CASCADE,
FOREIGN KEY(`event_id`) REFERENCES `event`(`id`) ON UPDATE CASCADE
);
Мой текущий свободный код выглядит так:
// Fluent API event table mapping properties
var eventMapping = modelBuilder.Entity<Event>().ToTable("event");
eventMapping.HasKey(@event => new { @event.Id, @event.LicenseKey }).Property(@event => @event.Id).HasColumnName("id").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
eventMapping.Property(@event => @event.Name).HasColumnName("name").IsRequired();
eventMapping.Property(@event => @event.LicenseKey).HasColumnName("license_key");
// Fluent API event_autostart table mapping properties
var autoStartMapping = modelBuilder.Entity<AutoStart>().ToTable("autostart_event");
autoStartMapping.HasKey(autoStart => autoStart.LicenseKey).Property(autoStart => autoStart.LicenseKey).HasColumnName("license_key").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
autoStartMapping.HasRequired(autoStart => autoStart.Event).WithRequiredDependent();
Но я не могу понять, как конкретносопоставьте имена столбцов для таблицы event_autostart
, поскольку внешний ключ является составным.