Manera limpia de lidiar con referencias circulares en EF?

Digo que tengo esta estructura de tabla:

Client
-----------
ClientId                     int            not null    (identity)
CurrentDemographicId         int            null        (FK to ClientDemographic)
OtherClientFields            varchar(100)   null


ClientDemographic
------------------
ClientDemographicId          int            not null    (identity)
ClientId                     int            not null    (FK to Client)
OtherClientDemographicFields varchar(100)   null

La idea es que el Cliente (en EF) tendrá una lista ClientDemographics y una propiedad CurrentDemographic.

El problema es que cuando configuro la estructura del objeto e intento guardarlo, aparece este error:

No se puede determinar un pedido válido para operaciones dependientes. Pueden existir dependencias debido a restricciones de clave externa, requisitos de modelo o valores generados por la tienda

Este error tiene sentido. Tengo una referencia circular en la configuración de mi tabla. No sabe qué entidad insertar primero (porque necesita el Id de ambas tablas al mismo tiempo).

Entonces, pirateé una solución que se parece a esto:

// Save off the unchanged ClientDemograpic
ClientDemographic originalClientDemographic = client.CurrentClientDemographic;

// Merge the contract into the client object
Mapper.Map(contract, client);

// If this is a new client then add as new to the list.
if (client.ClientId == 0)
{
    dataAccess.Add(client);
}

// Restore the original ClientDemographic so that EF will not choke
// on the circular reference.
ClientDemographic newClientDemographic = null;
if (client.CurrentClientDemographic != originalClientDemographic)
{
    newCurrentClientDemographic = client.CurrentClientDemographic;
    client.CurrentClientDemographic = originalClientDemographic;
}

// save our changes to the db.
dataAccess.SaveChanges();

// Restore updates to ClientDemographics and save (if needed)
if (newClientDemographic != null)
{
    client.CurrentClientDemographic = newCurrentClientDemographic;
    dataAccess.SaveChanges();
}

Pero volver a cambiar la referencia al valor anterior, guardar y luego configurarlo de nuevo para que pueda guardar nuevamente parece un truco.

Existe una forma más limpia de manejar las referencias circulares en EF?

Respuestas a la pregunta(2)

Su respuesta a la pregunta