Sto cercando di connettere un'applicazione web ASP.NET Core a un database esistente piuttosto complesso, in modalità di sola lettura.
Il database è molto complesso da mappare direttamente il suo layout in EFC, semplicemente accedo ai dati da esso tramite una serie di query. Quelle query sono ben definite, quindi posso definire gli oggetti che corrispondono ai loro risultati in anticipo senza problemi.
Tuttavia, non riesco a scoprire come definire il modello di entità per il contesto del database per questo. Non posso, ovviamente, impostare un TableAttribute sulla classe del modello - perché il modello non riflette una tabella, ma semplicemente un risultato di una query. Anche l'aggiunta di ColumnAttribute alle proprietà del modello non sembra fare il trucco, nel mio metodo OnModelCreating nel contesto del database, ottengo sempre un errore "InvalidOperationException: Il tipo di entità" MyEntityModel "richiede una chiave da definire."
Quale chiave dovrei definire, comunque? Non è come se una query avesse una chiave per le sue voci di risultato, oppure / posso farla avere una?
Sfortunatamente, non posso cambiare il database per aggiungere nuove viste, tabelle temporanee o qualsiasi altra cosa, io (posso) ho solo accesso in lettura.
Potrebbe anche essere che io non abbia ancora capito i concetti alla base di EF, ma tutti i tutorial / campioni che guardo gestiscono solo i casi più semplici e semplici, e il mio google-fu sembra fallire anche qui.
Anche se sembra che si stia lavorando attorno al problema usando basic connect-query-disconnect w / o EF potrebbe essere una possibilità, mi sembra che il modo DtabaseContext / EF sia più in linea con i principi di ASP.NET Core. Sentiti libero di non essere d'accordo o di dirmi altrimenti se sbaglio là.
Tutti i campioni che potrebbero mostrare un altro modo per fare questo lavoro sarebbero molto apprezzati.
L'uso di ASP.NET Core non significa che devi utilizzare il core di Entity Framework. È possibile utilizzare Full .NET Framework anziché .NET Core e Entity Framework Full invece di Entity Framework Core. Ci sono diversi vantaggi con questo:
1- ASP.NET Core 2 (attualmente in versione beta) funziona bene su .NET Standard 2. Dato che sia Full .NET Framework 4.6.1+ che .NET Core 2.0+ sono l'implementazione di .NET 2.0 standard, è possibile tornare a. NET Core 2 molto facilmente quando viene pubblicato il suo rilascio stabile.
2- Entity Framework Core 2.0 (attualmente in versione beta) presenta numerosi miglioramenti rispetto a Entity Framework Core 1.1.1. Lavorare con la versione 2.0 sarà molto più semplice di 1.1.1 Ha una migliore traduzione delle query, prestazioni migliori, meno errori, più metodi, ecc.
Così
Passaggio 1 >> Sviluppo dell'app con ASP.NET Core e versioni complete di EntityFramework e .NET Framework
Passaggio 2 >> Attiva .NET Core 2 e Entity Framework Core 2 nella tua app quando saranno disponibili le versioni stabili.
È consigliabile utilizzare lo strumento di reverse engineering del database di Entity Framework completo, quindi modificare il risultato per renderlo compatibile con EntityFramework Core.