Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Single Page Application, upshot.js, DbContext and DbDataController : Only Entity Models are supported?

When using the examples for Single Page Application, I've the following TodoItem controller:

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


Question 1:
It seems that only EntityModels are supported ?
When using a real ViewModel (model only used for the Views, not not used as 1:1 mapping to database entity), the DbDataController does not support this.

Also using Linq.Translations or PropertyTranslator does not seem to work, see this code extract:

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


Question 2:
What is the recommended design when using SPA, DBContext and ViewModels ?

like image 852
Stef Heyenrath Avatar asked Mar 19 '12 11:03

Stef Heyenrath


1 Answers

As far as I know so far is - it instists on the usage of "real" model classes bound to DbContext. I have the same problem as you - I need to use my own DTO objects which are "flat". The Json serialisation is currently not able to serialize data which has parent references in child objects (cyclic references). Usually I do not need the entity tree anyways so I created smaller classes which fits perfectly to the view. I tried to use a normal Controller with JsonResult and parsed the returned model into ko.mapping.fromJS after retrieved the data. Thats working fine. But - you have to take care of all the nice stuff the MVC4 generated viewmodels are already dealing with (like creating navigation, etc.). Maybe someone finds a workaround to "fake" a DbContext with DTO data.

like image 199
Obiwan007 Avatar answered Sep 28 '22 06:09

Obiwan007