Entity Framework + клиент Java Script

Я пытаюсь разработать приложение со следующими слоями:

  1. Модель Entity Framework
  2. Служба данных (либо WCF, либо веб-API, но я предпочитаю веб-API)
  3. Java-скрипт + HTML + CSS-клиент

Модель содержит наследование и полиморфные коллекции:

public class Master
{
    public virtual ICollection<BaseDetail> Details { get; set; }
}

public abstract class BaseDetail
{
    public virtual Master Master { get; set; }
}

public class Detail1 : BaseDetail { }
public class Detail2 : BaseDetail { }
public class Detail3 : BaseDetail { }

Проблема в том, что я не смог найти фреймворк Java Script, подходящий для моих нужд:

  1. Knockback
    • pros:
      • supports inheritance and polymorphic collections very well
      • поддерживает Web API и JSON (думаю, это проще, чем WCF и oData)
    • cons:
      • doesn't support EF metadata. You have to duplicate a model in java script by hands
      • недостаточно хорошо понимает JSON-сериализованную EF-модель. Вы должны предварительно и после обработки JSON
  2. Breeze.js
    • pros:
      • supports EF metadata very well. JS model is generated on the fly
    • cons:
      • doesn't support inheritance
      • не поддерживает WebAPI + JSON
  3. JayData
    • pros:
      • supports EF metadata well enough
    • cons:
      • it seems that it supports inheritance, but doesn't support polymorphic collections
      • не поддерживает WebAPI + JSON

Есть ли другие альтернативные JS-фреймворки? Или, может быть, я ошибаюсь насчет именованных фреймворков? Можете ли вы привести пример? Спасибо!


person Denis    schedule 11.11.2012    source источник
comment
почему вы думаете, что breezejs поддерживает метаданные очень хорошо, а jaydata достаточно хорошо? (я работаю на Джейдата)   -  person Gabor Dolla    schedule 12.11.2012
comment
Потому что генерирует JavaScript-модель на лету. Нет необходимости вызывать JaySvcUtil.exe. Но я думаю, что это очень субъективное преимущество... Модель не слишком часто меняется, и вызвать утилиту не проблема.   -  person Denis    schedule 20.11.2012
comment
Спасибо за разъяснения! На самом деле мы можем сделать и то, и другое с прегенерированной моделью и без нее. Синтаксис получения контекста немного отличается. В большинстве наших примеров используется статическая схема, так что это может ввести в заблуждение, извините за это. Если вы используете jaydata в качестве клиента odata в nodejs в Windows, мы поддерживаем только статический контекст, поскольку libxmljs не компилируется в Windows.   -  person Gabor Dolla    schedule 21.11.2012


Ответы (2)


Изменить: начиная с версии 1.3.1 Breeze теперь поддерживает наследование.

--

Что касается Breeze, вы правы в том, что он (пока) не поддерживает наследование. Это указано в дорожной карте Breeze, и вы можете проголосовать.

Он поддерживает веб-API ASP.NET и JSON. Любопытно, что вы думали иначе, учитывая, что почти все образцы BreezeJS представляют собой образцы веб-API, которые полагаются исключительно на тип содержимого JSON.

person Ward    schedule 12.11.2012
comment
Да, 3 голоса мои. Я имею в виду, что образцы контроллеров (о которых вы говорите) не являются настоящим REST. В них нет get/put/post/delete, только oData. Так что я думаю, что это неправда… Web API. Просто вариант службы данных WCF. - person Denis; 20.11.2012
comment
Вы правы и насчет JSON. Но я имею в виду, что это не простой JSON, он содержит метаданные. Например, этот JSON несовместим с Backbone. - person Denis; 21.11.2012

Поддержка JayData для WebAPI доступна в Расширение OData Microsoft Web API. Хотя вам нужно настроить серверную часть с точки зрения контроллеров, маршрутов и т. д.

Мы были бы очень рады работать над полиморфными коллекциями с приоритетом, сейчас мы как раз в процессе внедрения OData V3. Откройте вопрос на http://github.com/jaydata, чтобы мы могли связаться с вами для уточнения деталей.

person Peter Aron Zentai    schedule 12.11.2012
comment
Спасибо, я добавил предложение. - person Denis; 20.11.2012