Jak pobrać nowe jednostki (EntityState.New) z serwera za pomocą breezejs

Mam usługi sieciowe, które zwracają niektóre dane, które są następnie przekształcane w nowe elementy na serwerze, a następnie przekazywane klientowi, gdzie użytkownik może je edytować. Jeśli zdecyduje sięSaveChanges, podmioty powinny być przesłane do serwera i wstawione do bazy danych. Mam dwa problemy:

Gdy jednostki są zwracane do klienta, Breeze oznacza je jakoEntityState.NewBreeze oczekuje, że niezmienione elementy mają zestaw kluczy podstawowych. Ponieważ żaden ze zwróconych nowych elementów nie ma zestawu kluczy (wartość klucza typu Int32 równa się 0), Breeze uważa, że ​​serwer zwrócił wiele instancji tego samego obiektu

Aby zademonstrować problem, zmieńToDosController.ToDos metoda w przykładzie AngularJS, aby pasowała do następujących:

[HttpGet]
public IEnumerable<TodoItem> 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"},
    };
}

Po uruchomieniu próbki strona HTML pokaże dwie linie, obie będą miały opis „Drugi element”. Jeśli jawnie ustawię identyfikatory tych elementów na serwerze (których nie chcę robić, ponieważ klucze są generowane przez bazę danych), problem nie jest widoczny.

Pytanie: jak poprawnie zwracać elementy z serwera, aby były oznaczone jakoEntityState.New i zostaną zapisane w bazie danych (z wygenerowanymi kluczami), kiedySaveChanges jest nazywany.

Spodziewałbym się trochęMergeStrategy na kliencie lub dodatkowe dane / atrybuty na serwerze, aby to osiągnąć, ale nie udało się go znaleźć.

AKTUALIZACJA:

W celu wyjaśnienia:

Próbuję obsługiwać scenariusz, w którym użytkownicy wybierają i edytują jeden z elementów pochodzących z innego źródła, które powinny zostać później dodane do mojej bazy danych.

W szczegółach:

Klient wywołuje serwer z kryteriami wyszukiwania jako parametrami metody. Zwraca metodę serweraIEnumerable<Customer> - to robinie powrótIQueriable<Customer>

Serwer wysyła zapytanie do usługi internetowej zaplecza (systemu CRM) i przekształca wynik usługi internetowej zaplecza wCustomer podmioty. Wynik jest zwracany klientowi. Usługa sieciowa zaplecza nie jest dostępna dla klienta.

Klient wyświetla wynik użytkownikowi

Użytkownik wybiera jedną z jednostek i edytuje jej właściwości (takie jak zmiana nazwy lub adresu klienta)

Wybrany klient zostanie dodany do menedżera encji na kliencie. Powinien być wEntityState.Added

em.SaveChanges jest wywoływany, który przesyłaAdded na serwerze

Serwer wstawia nowego klienta do bazy danych, baza danych generuje nowy klucz podstawowy, który jest zwracany do klienta, gdzie EM aktualizuje klucz jednostki i ustawia stan jednostki naEntityState.Unchanged

Może potrzebuję osobnych jednostek i właściwym pytaniem jest:„Jak zwrócić elementy do klienta bez dodawania ich do menedżera encji?” (zostaną dodane w kroku 5 powyżej).

P.S: Jednym z rozwiązań byłoby użycie niestandardowego typu danych innych niż jednostka (takiego jak CustomerFromCRM) w wyniku mojej metody serwera. Następnie przekształciłbym je w klienta po stronie klienta. Ale chciałbym uniknąć tworzenia dodatkowych klas.

UPDATE2: Znalazłem podobne pytanie (bez zaakceptowanych odpowiedzi) tutaj:czy istnieje łatwy sposób oznaczenia elementu w pamięci podręcznej jako „dodanego”?

questionAnswers(3)

yourAnswerToTheQuestion