Jak określić nazwę tabeli za pomocą Entity Framework Code First Fluent API

86

Mam Entity i mam skonfigurować Entity Framework, aby zamapować go na tabelę bazy danych o innej nazwie.

Mogę to łatwo zrobić za pomocą Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ).

Ale ze względu na ograniczenia teraz muszę używać Code First Fluent API (moje obiekty domeny będą używane przez klientów zewnętrznych, więc nie powinny być specyficzne dla technologii - np. Mieć odniesienia do DataAnnotations)

Szukałem w witrynie MSDN, ale nic nie znalazłem. Czy to możliwe i jak?

Dziękuję Ci.

bairog
źródło
Ogólnie rzecz biorąc, powinieneś tworzyć DTO (obiekty transferu danych) i mapować do nich obiekty EF, nigdy nie powinieneś używać klas EF bezpośrednio, chyba że pracujesz nad małą / trywialną aplikacją.
reggaeguitar

Odpowiedzi:

95

Użyjesz .ToTable()metody:

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

Źródło: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx

Martin Cron
źródło
1
wolę to, ponieważ chcę wszystkie anotacje w jednym miejscu
rajeemcariazo
czy istnieje jakieś potwierdzenie, że tabela istnieje? zmieniliśmy nazwę tabeli i nic się nie zepsuło, czy jest to zachowanie, którego można się spodziewać? oczywiście nie może wykonać CRUD na stole o zmienionej nazwie, ale wydaje się, że niczego nie psuje ...
AZ Chad
217

Możesz również użyć adnotacji tabeli:

[Table("InternalBlogs")]
public class Blog

Zobacz: Adnotacje danych Code First

Assaf S.
źródło
6
Dzięki, ale jeśli uważnie przeczytasz moje pytanie - zobaczysz to podejście bezpośrednio w środku :)
bairog
2
Mimo że adnotacja nosi nazwę „Tabela”, wydaje się, że działa dobrze zarówno w przypadku widoków, jak i tabel.
Jon Schneider
@JonSchneider Po prostu spieram się tutaj o definicje bez konkretnego powodu, ale widok jest tabelą tylko do odczytu.
Erik Bergstedt
Adnotacja tabeli znajduje się w System.ComponentModel.DataAnnotations.Schema ;.
Pétur Ingi Egilsson
Jak to zyskało więcej głosów pozytywnych, pytanie wyraźnie dotyczy wersji płynnej API
Worthy7
7

Użyj metody ToTable:

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

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}
alexmac
źródło
1
Myślę, że podzielenie mapowań na klasy jest najczystszym podejściem.
SventoryMang
1
Ale w swojej OnModelCreatingmetodzie musisz zrobić: modelBuilder.Configurations.Add(new MyEntityMap());zamiast tego mógłbyś po prostu dodać modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");więc nie, to nie jest bardziej przejrzysty sposób, chyba że masz również inne mapowanie do wykonania dla tej encji.
Serj Sagan