7

Al utilizar los ejemplos de aplicación Una sola página, he la siguiente TodoItem controlador:Aplicación de una sola página, upshot.js, DbContext y DbDataController: ¿Solo se admiten los modelos de entidad?

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


Pregunta 1:
Parece que sólo EntityModels son compatibles?
Cuando se utiliza un modelo de vista real (el modelo solo se utiliza para las vistas, no se usa como correlación 1: 1 con la entidad de base de datos), el DbDataController no es compatible con esto.

También usando Linq.Translations o PropertyTranslator no parecen funcionar, consulte este extracto código:

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


Pregunta 2:
¿Cuál es el diseño recomendado cuando se utiliza SPA, DBContext y ViewModels?

Respuesta

3

Por lo que sé hasta ahora es - instiga el uso de clases de modelo "reales" vinculadas a DbContext. Tengo el mismo problema que usted: necesito usar mis propios objetos DTO que son "planos". La serialización Json actualmente no puede serializar datos que tengan referencias principales en objetos secundarios (referencias cíclicas). Por lo general, no necesito el árbol de entidades, así que creé clases más pequeñas que se ajustan perfectamente a la vista. Intenté usar un Controlador normal con JsonResult y analicé el modelo devuelto en ko.mapping.fromJS después de recuperar los datos. Eso está funcionando bien. Pero tienes que encargarse de todas las cosas buenas que los modelos de vista generados por MVC4 ya están tratando (como la creación de navegación, etc.). Quizás alguien encuentre una solución para "falsificar" un DbContext con datos DTO.

+2

Después de algunos experimentos más: puede usar sus propios objetos DTO siempre que tenga una propiedad asignada de Id que esté marcada como [Key]. Pero para andamiar las cosas, necesita tener un modelo basado en bases de datos "reales". Después de generar el controlador y ver cosas, puede reemplazar fácilmente las cosas de DBController con su propio DTO y crear los datos que desee. Pero debido a que no puede usar el DbContext para eso en los métodos Update/Insert helper del DbController. – Obiwan007

Cuestiones relacionadas