Come specificare il nome della tabella con l'API Code First Fluent di Entity Framework


86

Ho un'entità e devo configurare Entity Framework per mapparlo a una tabella di database con un nome diverso.

Posso farlo facilmente con Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ).

Ma a causa delle limitazioni ora devo utilizzare l' API Code First Fluent (i miei oggetti di dominio saranno utilizzati da client esterni, quindi non dovrebbero essere specifici della tecnologia, ad esempio avere riferimenti a DataAnnotations)

Ho cercato su MSDN ma non ho trovato nulla. Quindi è possibile e come?

Grazie.


In generale dovresti creare DTO (oggetti di trasferimento dati) e mappare i tuoi oggetti EF su di loro, non dovresti mai usare le classi EF direttamente a meno che tu non stia lavorando su un'app piccola / banale.
reggaeguitar

Risposte:


96

Userai il .ToTable()metodo:

modelBuilder.Entity<Department>().ToTable("t_Department");   

Fonte: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx


1
Preferisco questo perché voglio tutte le annotazioni in un unico posto
rajeemcariazo

c'è qualche convalida che la tabella esista? abbiamo rinominato una tabella e nulla si è rotto, è questo il comportamento che ti aspetteresti? ovviamente non può fare CRUD sul tavolo ribattezzato, ma non sembra rompere nulla ...
AZ Chad

220

Puoi anche utilizzare l'annotazione tabella:

[Table("InternalBlogs")]
public class Blog

Vedere: Annotazioni dati Code First


6
Grazie, ma se leggi attentamente la mia domanda, vedrai quell'apptoach direttamente nel mezzo :)
bairog

2
Anche se l'annotazione si chiama "Tabella", sembra funzionare bene sia per le viste che per le tabelle.
Jon Schneider

@ JonSchneider Sto solo discutendo le definizioni qui senza motivo in particolare, ma una vista è una tabella di sola lettura.
Erik Bergstedt

L'annotazione della tabella risiede in System.ComponentModel.DataAnnotations.Schema ;.
Pétur Ingi Egilsson,

In che modo questo ha ottenuto più voti positivi, la domanda chiede chiaramente la versione fluente
dell'api

7

Usa il metodo ToTable:

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public const string TableName = "MyEntity";

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}

1
Penso che suddividere le tue mappature in classi sia l'approccio più pulito.
SventoryMang

1
Ma poi nel tuo OnModelCreatingmetodo devi fare: modelBuilder.Configurations.Add(new MyEntityMap());dove invece di te avresti potuto aggiungere semplicemente un modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");quindi no, questo non è il modo più pulito a meno che tu non abbia anche altre mappature da fare per questa entità.
Serj Sagan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.