7

Quando si utilizzano gli esempi per pagina singola applicazione, ho il seguente TodoItem regolatore:Applicazione pagina singola, upshot.js, DbContext e DbDataController: sono supportati solo i modelli di entità?

public partial class MVC4TestController : DbDataController<MVC4TestContext> 
{ 
    public IQueryable<TodoItem> GetTodoItems() 
    { 
     return DbContext.TodoItems.OrderBy(t => t.TodoItemId); 
    } 
} 


Domanda 1:
sembra che solo EntityModels sono supportati?
Quando si utilizza un ViewModel reale (il modello utilizzato solo per le viste, non utilizzato come associazione 1: 1 all'entità database), DbDataController non supporta questo.

anche utilizzando Linq.Translations o PropertyTranslator non sembra funzionare, si veda questo estratto di codice:

private static readonly CompiledExpressionMap<TodoItem, string> fullExpression = 
    DefaultTranslationOf<TodoItem>.Property(t => t.Full).Is(t => t.Title + "_" + t.IsDone); 

public string Full 
{ 
    get 
    { 
     return fullExpression.Evaluate(this); 
    } 
} 


Domanda 2:
Qual è il disegno consigliata quando si utilizza SPA, DbContext e ViewModels?

risposta

3

Per quanto ne so finora - si attiva l'utilizzo di classi di modelli "reali" associate a DbContext. Ho lo stesso problema di te - ho bisogno di usare i miei oggetti DTO che sono "piatti". La serializzazione Json non è attualmente in grado di serializzare i dati che hanno riferimenti principali negli oggetti figlio (riferimenti ciclici). In genere non ho bisogno dell'albero delle entità, quindi ho creato classi più piccole che si adattano perfettamente alla vista. Ho provato a utilizzare un normale controller con JsonResult e ho analizzato il modello restituito in ko.mapping.fromJS dopo aver recuperato i dati. Questo funziona bene. Ma - devi occuparti di tutte le cose belle che i viewmodels generati da MVC4 hanno già a che fare (come la creazione di navigazione, ecc.). Forse qualcuno trova una soluzione alternativa per "falsificare" un DbContext con dati DTO.

+2

Dopo alcuni altri esperimenti: è possibile utilizzare i propri oggetti DTO fino a quando si dispone di una proprietà mappata con ID contrassegnata come [Chiave]. Ma per gli scaffolding è necessario disporre di un modello "reale" basato su db. Dopo che il controller e il materiale di visualizzazione sono stati generati, è possibile sostituire facilmente i componenti di DBController con il proprio DTO e creare i dati come preferisci. Ma per causa non è possibile utilizzare DbContext per questo nei metodi helper Update/Insert di DbController. – Obiwan007

Problemi correlati