Существуют ли рамки ORM для веб-SQL (JavaScript)? - PullRequest
9 голосов
/ 01 сентября 2010

Кто-нибудь знает, доступен ли он сейчас или будет в ближайшем будущем?

Ответы [ 4 ]

7 голосов
/ 19 мая 2012

Существует новая библиотека JayData , похожая на EntityFramework (или NHibernate) для платформы JavaScript: предоставляет Запрос языка JavaScript (JSLQ) и JavaScript CRUD. Также поддерживает определения моделей, navigationProperties и отношения 1..1.0, 1..m, m..n.

Я копирую короткий кодовый блокнот о том, как его использовать:

//define storage model: Department and Employee in a 1..m relation

$data.Entity.extend("$org.types.Department", {
  Id: { type: "int", key: true, computed: true },
  Name: { type: "string", required: true },
  Address: { type: "string" },
  Employees: { type: "Array", elementType: "$org.types.Employee", inverseProperty:"Department" }
});


$data.Entity.extend("$org.types.Employee", {
  Id: { type: "int", key: true, computed: true },
  FirstName: { type: "string", required: true },
  LastName: { type: "string", required: true }, 
  Department: { type: "$org.types.Department", inverseProperty:"Employees"}
});

$data.EntityContext.extend("$org.types.OrgContext", {
  Department: { type: $data.EntitySet, elementType: $org.types.Department },
  Employee: { type: $data.EntitySet, elementType: $org.types.Employee }
});

Вы можете кодировать против OrdContext и коллекций в нем. Следующая строка создаст экземпляр контекста, который поддерживается локальной WebSQL (у вас есть другие опции, такие как indexeddb или OData)

var context = new $org.types.OrgContext({ name: "webSql", databaseName: "OrgDB" });

Добавить данные

var department = new $org.types.Department({ Name: 'Finance', Employees: [] });

var emp1 = new $org.types.Employee({ FirstName: 'John', LastName: 'Smith'});
department.Employees.push(emp1);

var emp2 = new $org.types.Employee({ FirstName: 'Jane', LastName: 'Smith'});
emp2.Department = department;

context.add(department);
context.add(emp2);

context.saveChanges();

Теперь, когда у вас есть данные в хранилище, вы можете запросить их. Запросы JSLQ поддерживаются в полях сущностей, а также в полях навигации, которые указывают в направлении m..1. (В версии 1.0 вы не можете напрямую против 1..m navProperties. Вы можете обойти это с помощью in выражения

//filter
context.Employees
  .filter( function(emp) { return emp.LastName == 'Smith' })
  .toArray(...);

//filter
context.Employees
  .filter( function(emp) { return emp.FirstName.startsWith('J') ||
                                  emp.LastName.toLowerCase.contains('mith') })
  .toArray(...);

//filter2
context.Employees
  .filter( function(emp) { return emp.Department.Id == 1 })
  .toArray( function(emps) { } );

//filter2 + eager load
context.Employees
  .include("Department")
  .filter( function(emp) { return emp.Department.Id == 1 })
  .toArray( function(emps) { } );


//map/project
context.Employees
  .filter( function(emp) { return emp.Department.Id == 1 }).toArray(...)
  .map( function(emp) { return { EmployeeName: emp.FirstName + emp.LastName, 
                                DepartmentName: emp.Department.Name }})
  .forEach( function(item) { ... })
3 голосов
/ 05 ноября 2010

Я ищу то же самое. Похоже, стройная комплектация. Тот, который выглядел наиболее перспективным для меня, это persistence.js . Импел также выглядит хорошо, но, к сожалению, похоже, что он не обновлялся за полтора года. ActiveRecord.js может сработать, но, похоже, они еще не поддерживают Web SQL. Надеюсь, кто-то опубликует еще несколько вариантов.

1 голос
/ 11 марта 2011

Я тоже ищу то же самое. JazzRecord выглядит вероятным кандидатом.

0 голосов
/ 23 февраля 2012

Реализация, основанная на JazzRecord - это реализация joli.js , разработанная для платформы Appcelerator Titanium .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...