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.


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


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


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.