EF7 - Nome colonna personalizzato per la relazione HasOne

entity-framework entity-framework-core

Domanda

Come si specifica un nome di colonna personalizzato con una relazione HasOne in EF7?

Considera le seguenti classi di esempio:

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; }
}

E questa configurazione fluente:

modelBuilder.Entity<House>()
    .HasOne(x => x.Address)
    .WithOne()
    .OnDelete(DeleteBehavior.Cascade);

Che porta a questa configurazione del DB:

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]));

Come posso specificare un nome di colonna diverso da "AddressId" nella tabella House? Non riesco a trovare un metodo simile a HasColumnName come se esistesse su proprietà non di navigazione.

Sto utilizzando Entity Framework 7 RC1-Final.

Risposta popolare

È possibile utilizzare Data Annotations per configurare la chiave esterna della relazione.

public int AddressID { get; set; }

[ForeignKey("AddressID")]
public Address Address { get; set; }

Ciò richiede una proprietà che verrà utilizzata come chiave esterna nella relazione. Inoltre, tieni presente che è consigliabile disporre di una chiave esterna esplicita per le tue relazioni diversa da una chiave esterna shadow. Ciò impedirà di avere molti problemi durante l'inserimento / l'aggiornamento poiché non è necessario impostare l'intero Address proprietà di navigazione per salvare un'entità House . Vedi il problema qui

Non testato, ma forse potrebbe funzionare (non riesco a trovare un modo per installare EF7 in questo momento)

modelBuilder.Entity<House>()
    .HasOne(x => x.Address)
    .WithOne()
    .OnDelete(DeleteBehavior.Cascade);
    .HasForeignKey(x => x.AddressID);

Puoi controllare qui per ulteriori esempi: Foreign Key Relationships EF7



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché