我正在尝试使用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
表专门映射列名。