Cómo obtener nuevas entidades (EntityState.New) del servidor con breezejs

Tengo un servicio web que devuelve algunos datos, que luego se transforman en nuevas entidades en el servidor y luego se pasan al cliente, donde el usuario puede editarlos. Si él eligeSaveChanges, las entidades deben ser enviadas al servidor e insertadas en la base de datos. Tengo dos problemas:

Cuando las entidades se devuelven al cliente, Breeze las marca comoEntityState.NewBreeze espera que las entidades sin cambios tengan un conjunto de claves primarias. Debido a que ninguna de las nuevas entidades devueltas tiene el conjunto de claves (el valor clave del tipo Int32 es igual a 0), Breeze piensa que el servidor devolvió varias instancias de la misma entidad

Para demostrar el problema, cambie elToDosController.ToDos Método en la muestra AngularJS para que coincida con lo siguiente:

[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"},
    };
}

Cuando ejecute el ejemplo, la página HTML mostrará dos líneas, ambas tendrán la descripción "Segundo elemento". Si configuro explícitamente los identificadores de esos elementos en el servidor (lo que no deseo hacer, porque las claves son generadas por la base de datos), el problema no se manifiesta.

La pregunta: cómo devolver correctamente las entidades desde el servidor, para que se marquen comoEntityState.New y se guardarán en la base de datos (con claves generadas) cuandoSaveChanges se llama.

Esperaría algunosMergeStrategy en el cliente o algunos datos / atributos adicionales en el servidor para lograr esto, pero no pudo encontrar uno.

ACTUALIZAR:

Para aclarar:

Intento admitir un escenario cuando los usuarios seleccionan y editan una de las entidades que se originan en alguna otra fuente, que luego debería agregarse a mi base de datos.

En detalles:

El cliente llama al servidor con criterios de búsqueda como parámetros del método. Método del servidor devuelveIEnumerable<Customer> - lo haceno regresoIQueriable<Customer>

El servidor consulta un servicio web backend (sistema CRM) y transforma el resultado del servicio web backend enCustomer entidades El resultado se devuelve al cliente. El servicio web backend no está disponible para el cliente.

El cliente muestra el resultado al usuario.

El usuario selecciona una de las entidades y edita sus propiedades (como cambiar el nombre o la dirección del cliente)

El cliente seleccionado se agrega al administrador de entidades en el cliente. Debería estar en elEntityState.Added

em.SaveChanges Se llama, que presenta laAddEntidad ed al servidor

El servidor inserta al nuevo cliente en la base de datos, la base de datos genera una nueva clave principal, que se devuelve al cliente, donde EM actualiza la clave de entidad y establece el estado de la entidad paraEntityState.Unchanged

Tal vez necesito entidades separadas y la pregunta correcta es:"¿Cómo devolver entidades al cliente sin agregarlas al administrador de entidades?" (Se agregarán en el paso 5 anterior).

P.S: Una solución sería utilizar un tipo de datos personalizado, sin entidad (como CustomerFromCRM) como resultado de mi método de servidor. Luego los transformaría a la entidad cliente en el lado del cliente. Pero me gustaría evitar crear clases adicionales.

ACTUALIZACIÓN2: He encontrado una pregunta similar (sin respuesta aceptada) aquí:¿hay una manera fácil de marcar una entidad en el caché como "agregada"?

Respuestas a la pregunta(3)

Su respuesta a la pregunta