So geben Sie den Tabellennamen mit der Entity Framework Code First Fluent API an

83

Ich habe eine Entität und muss Entity Framework so konfigurieren, dass es einer Datenbanktabelle mit einem anderen Namen zugeordnet wird.

Ich kann dies leicht mit Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ) tun .

Aufgrund von Einschränkungen muss ich jetzt die Code First Fluent-API verwenden (meine Domänenobjekte werden von externen Clients verwendet, daher sollten sie nicht technologiespezifisch sein - z. B. Verweise auf DataAnnotations).

Ich habe auf MSDN gesucht, aber nichts gefunden. Also ist es möglich und wie?

Danke dir.

Bairog
quelle
Im Allgemeinen sollten Sie DTOs (Datenübertragungsobjekte) erstellen und Ihre EF-Objekte ihnen zuordnen. Sie sollten die EF-Klassen niemals direkt verwenden, es sei denn, Sie arbeiten an einer kleinen / trivialen App.
Reggaeguitar

Antworten:

94

Sie werden die .ToTable()Methode verwenden:

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

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

Martin Cron
quelle
1
Ich bevorzuge dies, weil ich alle Anotationen an einem Ort haben
möchte
Gibt es eine Bestätigung, dass die Tabelle existiert? Wir haben eine Tabelle umbenannt und nichts ist kaputt gegangen. Ist dies das Verhalten, das Sie erwarten würden? es kann offensichtlich nicht CRUD auf dem umbenannten Tisch machen, aber es scheint nichts zu brechen ...
AZ Chad
212

Sie können auch die Tabellenanmerkung verwenden:

[Table("InternalBlogs")]
public class Blog

Siehe: Code First Data Annotations

Assaf S.
quelle
6
Thx, aber wenn Sie meine Frage sorgfältig lesen - Sie werden sehen, dass Apptoach direkt in der Mitte davon :)
Bairog
2
Obwohl die Anmerkung "Tabelle" heißt, scheint sie sowohl für Ansichten als auch für Tabellen gut zu funktionieren.
Jon Schneider
@ JonSchneider Ich diskutiere hier nur Definitionen ohne besonderen Grund, aber eine Ansicht ist eine schreibgeschützte Tabelle.
Erik Bergstedt
Die Tabellenanmerkung befindet sich in System.ComponentModel.DataAnnotations.Schema;.
Pétur Ingi Egilsson
Wie hat dies mehr positive Stimmen bekommen, die Frage fragt eindeutig nach der fließenden API-Version
Worthy7
7

Verwenden Sie die ToTable-Methode:

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

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}
alexmac
quelle
1
Ich denke, das Aufteilen Ihrer Zuordnungen in Klassen ist der sauberste Ansatz.
SventoryMang
1
Aber dann müssen Sie in Ihrer OnModelCreatingMethode Folgendes tun: modelBuilder.Configurations.Add(new MyEntityMap());Wo Sie stattdessen nur ein modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");So-Nein hätten hinzufügen können , ist dies nicht der sauberere Weg, es sei denn, Sie hatten auch andere Zuordnungen für diese Entität zu erledigen.
Serj Sagan