2012-12-02 16 views
12

Ho 3 tabelle nel mio database MS SQL e ho aggiunto un EntityFramework (più recente) al mio progetto in cui ho importato queste 3 tabelle. Il primo problema è stato che nessuna entità è stata creata, quindi ho modificato la "Strategia di generazione del codice" da None a Default.X contiene già una definizione Y con EntityFramework? (database semplice)

dopo la generazione ottengo

X contiene già una definizione per Y

su tutte le proprietà delle entità.

Quando guardando più da vicino ha generato un parziale ex Users.cs e uno User parziale nel MainModel.Designer.cs?

Perché genera User.cs? Ho una configurazione simile in un altro progetto e EF è impostato con le stesse impostazioni, non c'è User.cs?

Edit1: riesco a vedere una cosa che differenzia e questo è utilizzare i tipi spaziali forte che è impostata su False nel progetto in mancanza, è tuttavia possibile impostare a true (grigio)?

risposta

20

È necessario utilizzare la strategia di generazione codice None per il file .edmx. In alternativa, rimuovere i modelli MainModel.tt e MainModel.Context.tt, che generano entità modello e contesto.

Se si utilizza la strategia di generazione codice Default, le entità e il contesto verranno generati nel file MainModel.Designer.cs. Quelle sarebbero entità standard, ereditate da EntityObject, il contesto sarà ereditato da ObjectContext. Con Entity Framework 5 abbiamo la generazione di entità POCO. E l'intera generazione viene eseguita nei modelli T4, che generano il contesto, ereditato dalle entità DbContext e POCO senza alcun tipo di base (beh, solo oggetto).

Se nella progettazione di edmx sono presenti sia modelli che generazione di codice abilitata, verranno generati due gruppi di entità. Ecco perché hai un conflitto di nomi.

+0

Grazie! Se cambio la generazione del codice su none, noto che il tipo verrà generato come dici tu, ma verrà denominato Users proprio come la tabella nel database. Ho bisogno che venga chiamato User come entità nella soluzione. È possibile cambiare con la generazione POCO? Ho provato a cambiare il nome della tabella in EF ma non funziona? Spesso rimuovo tutte le entità nell'EF e le aggiungo di nuovo, quindi sarebbe bello se la soluzione funzionasse con quello. – Ivy

+0

Sì, è molto semplice. Aprire la finestra di progettazione edmx, selezionare l'entità 'Utenti' e rinominarla in' Utente' (fare doppio clic sul titolo etity). Quindi salva il file edmx - 'MainModel.Context.tt' genererà nuovamente le classi di entità (vedrai il file' User.cs' invece di 'Users.cs'). –

+0

Scusa ma non funziona, riconosce solo gli utenti anche quando il titolo dell'entità è impostato su Utente. – Ivy

3
  1. Fare clic con il tasto destro sul modello di entità.
  2. Passare alle proprietà e rimuovere il nome predefinito in "Strumento personalizzato".
  3. Assegnare il edmx nel model.tt e model.context
  4. Costruirlo ed eseguirlo si sarà esenti da errori.
+0

Grazie mille. È diventato il mio problema dopo molte difficoltà. – Dilip0165

Problemi correlati