2014-03-15 4 views
0

Это мой код:BreezeController возвращает неправильный объект, созданный динамически?

[Authorize] 
[BreezeController] 
public class BreezeController : ApiController 
{ 
    private readonly MyRepository _repository; 

    public BreezeController() 
    { 
     _repository = new MyRepository(User); 
    } 

    [HttpGet] 
    public IQueryable<Compound> Compounds(int id) 
    { 
     var compounds = new List<Compound>(); 
     compounds.add(new Compound() { Name = "cmp1" }); 
     compounds.add(new Compound() { Name = "cmp2" }); 
     compounds.add(new Compound() { Name = "cmp3" }); 
     return compounds.AsQueryable(); 
    } 
} 

На стороне клиента, я получаю три соединения вернулся, однако, все три имеют то же содержание, что и последний (cmp3). Зачем?

ответ

0

Вы определили уникальный идентификатор где-нибудь для вашей модели Compound. Если у вас есть конструктор, вам нужно убедиться, что вы генерируете Id для этих объектов или вручную назначаете их.

Когда сервер передает объекты обратно на клиентскую сторону Breeze, ваш диспетчер объектов не знает, что он должен генерировать идентификаторы, если вы не сообщите об этом. Когда он материализует эти объекты из запроса, все они имеют одинаковый идентификатор (нуль, возможно), который является уникальным. Бриз, скорее всего, думает, что вы передаете три экземпляра одного и того же объекта.

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

+0

Это была именно эта проблема. Большое спасибо! Я должен создавать эти объекты на сервере, потому что они создаются с помощью других библиотек. В идеале я хотел бы сразу сохранить их в базе данных, но я не мог понять, как это сделать. См. Мой другой вопрос в [link] (http://stackoverflow.com/questions/22432592/angular-breeze-how-to-save-the-data-in-breezecontroller-to-database-directly). – newman

Смежные вопросы