2013-05-16 1 views
1

Моя цель - сохранить простую связь между двумя ветвями на моем сервере OData.Breeze.js: как сохранить отношение сущностей с помощью адаптера OData

Я настроить сервер, я могу:

  • вставки данных
  • данных запроса
  • создать связь между двумя объектами на стороне клиента
  • НО не в состоянии сохраняйте отношения на стороне сервера.

Любые идеи о том, что мне не хватает?

Ниже мои детали установки


  • Я использую OData/MongoDB бэкенд работает JayData на Node.js (VirtualBox, Ubuntu 12.04, Node.js, MongoDB)
  • я создал простая модель данных с пользователем и лицом, основанным на this stack overflow question. Это определение DataModel JayData

>

$data.Class.define("$org.Types.user", $data.Entity, null, { 
    Id: {type: "id", key: true, computed: true, nullable: false }, 
    Person: { type: "$org.Types.person", inverseProperty: "User", required:true }, 
    EmailAddress: { type: "string"}, 
    Password: { type: "string"} 
}, null) 

$data.Class.define("$org.Types.person", $data.Entity, null, { 
    Id: {type: "id", key: true, computed: true, nullable: false }, 
    User: { type: "$org.Types.user", inverseProperty: "Person"}, 
    FirstName: { type: "string"}, 
    LastName: { type: "string"} 
}, null); 


$data.Class.defineEx("$org.Types.Context", [$data.EntityContext, $data.ServiceBase], null, { 
    User: {type: $data.EntitySet, elementType: $org.Types.user } , 
    Person: {type: $data.EntitySet, elementType: $org.Types.person } 
}); 

exports = $org.Types.Context; 
  • Я могу запросить данные с помощью Breeze.js
  • Я могу вставить пользователей и Person объектов с помощью Breeze. JS
  • Я могу установить связь в Breeze, и я вижу изменение сущностей
  • Я обновленный Breeze.js к 1.3.3

>

var manager = new breeze.EntityManager('api/'); 
// other breeze initialization stuff, metadata etc. 

var person = manager.createEntity('Person', undefined, breeze.EntityState.Detached); 
var user = manager.createEntity('User', undefined, breeze.EntityState.Detached); 

// set other fields, name, email, password 
user.Person(user); 
manager.addEntity(user); 
manager.addEntity(person); 

// save the changes 
manager.saveChanges().then(function() { // etc 

Но я вижу только два OData пост для двух лиц, но ничего, чтобы связать эти две структуры вместе

  • Я исключила адаптер OData как как WebAPI и OData адаптер вызывает те же функции в базе кода Breeze, и есть несколько Breeze/WebAPI, которые демонстрируют возможность запроса и вставки связанных объектов.
  • Я не видел образец Breeze.js/OData, который, кажется, обращается к этому.
  • Ближайшим примером, который работает, является datajs code sample. Он помещает связанный объект в/$ links/для создания отношений (чего я не вижу в адаптере OData ни Breeze.js, ни JayData).

ответ

0

Я никогда не использовал Breeze с сервером JayData, но я использую JayData client library для сохранения данных по OData в течение года и он работает со статической схемой (вы создаете его с JaySvcUtil) и динамической схемой (хватает метаданные с сервера во время выполнения).ű

Для важных вещей:

  • использование типизированных entites, не возражает ПОКО
  • установить требуемую сторону отношений, чтобы элементы сохранялись

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script src="http://include.jaydata.org/datajs-1.0.3.min.js"></script> 
    <script src="http://include.jaydata.org/jaydata.js"></script> 
    <script> 
         var url = 'http://localhost:54001/personService'; 
    
         $data.service(url, function(contextFactory, contextType){ 
          var db = contextFactory(); 
          db.onReady(function(){ 
    
           var user = new db.User.elementType({ EmailAddress: '[email protected]'}); 
           var person = new db.Person.elementType({ FistName: 'Joe', LastName: 'Smith', User: user }); //set the value to the required side of the relationship to have your entities saved in the batch 
           db.Person.add(person) 
    
           db.saveChanges(function() { 
            db.Person.include('User').toArray(function (p) { console.log(p);}); 
           }); 
          }) 
         }); 
    

отказ от ответственности: я являюсь членом J ayData dev, так что вы можете помочь и с серверной стороной.

+0

Спасибо, что код сработал и отправил ожидаемое значение. Хотя я получаю сообщение об ошибке на стороне сервера при попытке сохранить Person, я получаю следующее: «TypeError: Object # arno

+2

Он работает при использовании нового [модуля npm-сервера odata-сервера] (http : //jaydata.org/blog/how-to-set-up-a-nodejs-odata-endpoint-with-odata-server). Спасибо за вашу помощь. – arno