EF7 - HasOne 关系的自定义列名称

Ski*_*ris 7 entity-framework entity-framework-core

如何在 EF7 中指定具有 HasOne 关系的自定义列名称?

考虑以下示例类:

public class House
{
    public int Id { get; set; }
    public int BedroomCount { get; set; }
    public Address Address { get; set; }
}

public class Address
{
    public int Id { get; set; }
    public string StreetName { get; set; }
    public string StreetNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这个流畅的配置:

modelBuilder.Entity<House>()
    .HasOne(x => x.Address)
    .WithOne()
    .OnDelete(DeleteBehavior.Cascade);
Run Code Online (Sandbox Code Playgroud)

这导致了这个数据库配置:

CREATE TABLE [House] (
[Id] int NOT NULL IDENTITY,
[AddressId] int,
[BedroomCount] int NOT NULL,
CONSTRAINT [PK_House] PRIMARY KEY ([Id]),
CONSTRAINT [FK_House_Address_AddressId] FOREIGN KEY ([AddressId]) REFERENCES [Address] ([Id]) ON DELETE CASCADE);

CREATE TABLE [Address] (
[Id] int NOT NULL IDENTITY,
[StreetName] nvarchar(max),
[StreetNumber] nvarchar(max),
CONSTRAINT [PK_Address] PRIMARY KEY ([Id]));
Run Code Online (Sandbox Code Playgroud)

如何在 House 表上指定除“AddressId”之外的列名称?我找不到类似于 HasColumnName 的方法,就像非导航属性上的方法一样。

我正在使用实体框架 7 RC1-Final。

jpg*_*ssi 2

您可以用来Data Annotations配置关系的外键。

public int AddressID { get; set; }

[ForeignKey("AddressID")]
public Address Address { get; set; }
Run Code Online (Sandbox Code Playgroud)

这需要一个将用作关系中的外键的属性。另请注意,建议您为关系使用显式外键,而不是影子外键。这将防止您在插入/更新时遇到很多问题,因为您不需要设置整个导航属性Address来保存House实体。看到问题在这里

未经测试,但也许这可以工作(现在找不到安装 EF7 的方法)

modelBuilder.Entity<House>()
    .HasOne(x => x.Address)
    .WithOne()
    .OnDelete(DeleteBehavior.Cascade);
    .HasForeignKey(x => x.AddressID);
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看更多示例:外键关系 EF7