设置一对一复合外键的列名

时间:2018-10-16 09:49:46

标签: c# sql .net entity-framework-6 fluent

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

0 个答案:

没有答案