2010-07-18 6 views
13

Qualcuno sa come modificare la tabella db mappata per un'entità in EF4 (entità framework 4)?Cambia il nome della tabella db in EF4 (entità framework 4)

Modifica successiva: Penso di aver trovato il luogo in cui i nomi delle tabelle sono definiti, nel browser del modello. Ma i loro nomi sono readonly, quindi non è possibile modificarli utilizzando il designer. Inoltre, non esiste alcun riferimento (da quello che ho cercato) al nome della tabella nello schema xml.

risposta

19

Se avete solo bisogno di cambiare il nome della tabella è possibile:

  1. Apri file EDMX con XML Editor.
  2. Individua la sezione SSDL al suo interno.
  3. Individuare l'elemento set di entità, ad esempio <EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" />.
  4. Aggiungi l'attributo Table="MyTableName". <EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" Table="MyTableName" />

Ecco un completo CSDL, SSDL, MSL specification.

Spero che questo aiuti.

+2

Il problema con questo approccio è che dovrai cambiarlo ogni volta che ri-generi i tuoi mapping db. – Zacho

+0

Questo non è un approccio pratico come menzionato da Zacho. –

0

È possibile eseguire un processo memorizzato che modifica il nome della tabella, passando il tablename come variabile. Quindi importa il proc memorizzato in EF4.

CREATE PROCEDURE ChangeTableName

@TableName varchar(200) 

AS BEGIN SET NOCOUNT ON;

EXEC sp_rename "User", @TableName 

FINE GO

+0

Ma non riesco a vedere come l'importazione della stored procedure aggiornerà lo schema. Penso di non aver chiarito cosa sto cercando di ottenere, sto provando a cambiare la tabella a cui è mappato uno schema ef, ad esempio ora sta recuperando i dati dalla tabella x nel database, lo voglio per recuperare i dati dalla tabella y ora, entrambe le tabelle esistono nel database, entrambe hanno la stessa identica struttura. Il motivo per cui non posso semplicemente importare dati da una tabella all'altra è perché una tabella viene utilizzata da alcune applicazioni che non possono essere modificate e tutte le applicazioni devono accedere agli stessi dati. Grazie per la risposta. – scripni

+0

Vedo il problema. È necessario aggiornare dinamicamente lo schema EF, dopo aver rinominato la tabella. – fARcRY

+0

Questo potrebbe funzionare in un piccolo progetto locale, ma in un ambiente aziendale sarebbe assolutamente inaccettabile. Chissà cosa sta toccando quei nomi da tavolo. – Zacho

7

Credo che quello che stai chiedendo è riconfigurare la mappatura di un'entità in una tabella. È possibile fare clic con il tasto destro su un'entità e selezionare la mappatura della tabella. Questo ti mostrerebbe l'entità in cui la tabella è mappata. Puoi cambiare il tavolo lì dentro. Tuttavia, quando apri il menu a discesa, vedrai solo la tabella che hai importato utilizzando la procedura guidata Aggiorna modello. Se la tabella non viene importata, non verrà elencata. È quindi possibile mappare le proprietà in modo appropriato ai nomi delle colonne della tabella.

12

Una soluzione alternativa sarebbe sostituire un metodo nella classe DbContext.

public class MyDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Product>().ToTable("DB_PRODUCTS_TBL"); 
     // otherwise EF assumes the table is called "Products" 
    } 
} 
+0

fantastico! Sto facendo "Code First" quindi questo funziona per me. – JDPeckham

0

Nel Browser modello o nella superficie di progettazione, fare clic con il tasto destro del mouse sull'entità e selezionare Proprietà. Nella finestra delle proprietà, modificare il campo "Nome set entità".

Questo ha funzionato per me, tuttavia stavo progettando prima lo schema e poi creando il database.

0

Perché ho creato il mio database di prima, ho fatto la seguente:

  1. eseguito il backup del file * .edmx.
  2. Modificato il nome della tabella del mio database.
  3. Come suggerito rinominando il nome del set di entità nelle proprietà.
  4. Ho quindi aggiornato il modello basato sul mio database facendo clic con il tasto destro del mouse sull'entità.
  5. Ho notato che il file * .edmx mancava metà delle righe, quindi ho sovrapposto il file * .edmx al mio backup, l'ho aperto nel blocco note e ho sostituito il mio vecchio nome di tabella con il mio nuovo nome tabella.
  6. Ricostruito l'applicazione MVC, testato e funzionante.

Nota: Se tutti questi passaggi di cui sopra sono necessari non lo so, è solo quello che ho provato e ha funzionato per me.

Problemi correlati