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.


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


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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.