Как получить новые (EntityState.New) сущности с сервера с помощью breezejs

У меня есть веб-сервисы, которые возвращают некоторые данные, которые затем преобразуются в новые сущности на сервере, а затем передаются клиенту, где пользователь может их редактировать. Если он решитSaveChanges, объекты должны быть отправлены на сервер и вставлены в базу данных. У меня две проблемы:

Когда объекты возвращаются клиенту, Breeze помечает их какEntityState.NewBreeze ожидает, что неизменным объектам будет установлен первичный ключ. Поскольку ни один из возвращенных новых объектов не имеет установленного ключа (значение ключа типа Int32 равно 0), Breeze считает, что сервер возвратил несколько экземпляров одного и того же объекта.

Чтобы продемонстрировать проблему, изменитеToDosController.ToDos метод в образце AngularJS для соответствия следующему:

[HttpGet]
public IEnumerable Todos()
{
    return new TodoItem[]
    {
        // Keys are not set because (equals to 0) these are new entities 
        new TodoItem() { Description="First item"},
        new TodoItem() { Description="Second item"},
    };
}

Когда вы запустите образец, HTML-страница покажет две строки, обе будут иметь описание "Второй пункт ", Если я явно устанавливаю идентификаторы этих элементов на сервере (что я не хочу делать, потому что ключи генерируются базой данных), проблема не проявляется.

Вопрос: как правильно вернуть сущности с сервера, чтобы они были помечены какEntityState.New и они будут сохранены в базе данных (с сгенерированными ключами), когдаSaveChanges называется.

Я бы ожидал некоторыхMergeStrategy на клиенте или некоторых дополнительных данных / атрибуте на сервере для достижения этой цели, но не смог найти их.

ОБНОВИТЬ:

Чтобы уточнить:

Я пытаюсь поддержать сценарий, когда пользователи выбирают и редактируют одну из сущностей, которые происходят из какого-то другого источника, который должен быть позже добавлен в мою базу данных.

Подробно:

Клиент вызывает сервер с критериями поиска в качестве параметров метода. Возвращает метод сервераIEnumerable - оно делаетне вернутьIQueriable

Сервер запрашивает внутренний веб-сервис (система CRM) и преобразует результат внутреннего веб-сервиса вCustomer юридические лица. Результат возвращается клиенту. Внутренний веб-сервис недоступен для клиента.

Клиент отображает результат пользователю

Пользователь выбирает одну из сущностей и редактирует ее свойства (например, меняет имя или адрес клиента)

Выбранный клиент будет добавлен в диспетчер объектов на клиенте. Должно быть вEntityState.Added

em.SaveChanges называется, который представляетAddред сущность на сервер

Сервер вставляет нового клиента в базу данных, база данных генерирует новый первичный ключ, который возвращается клиенту, где EM обновляет ключ объекта и устанавливает состояние объекта вEntityState.Unchanged

Может быть, мне нужны отдельные объекты, и правильный вопрос таков:Как вернуть сущности клиенту, не добавляя их в диспетчер сущностей? " (они будут добавлены в шаге 5 выше).

П.С .: Одним из решений было бы использование пользовательского, не относящегося к сущности типа данных (такого как CustomerFromCRM) в качестве результата моего метода сервера. Затем я бы преобразовал их в сущность Customer на стороне клиента. Но я бы хотел избежать создания дополнительных классов.

ОБНОВЛЕНИЕ 2: я нашел подобный вопрос (без принятого ответа) здесь:Есть ли простой способ пометить объект в кэше какдобавил "?

Ответы на вопрос(3)

Ваш ответ на вопрос