Pregunta

Estoy usando una micro-erm (dapper) y estoy tratando de crear una implementación de la unidad de trabajo (UOW) para que mis repositorios los usen. Estoy un poco perplejo como la mejor manera de lidiar con las relaciones entre padres e hijos (clave extranjera) en mi UOW. Entonces, por ejemplo, si tengo las siguientes dos entidades que se asignan directamente a las tablas de la base de datos:

public class User
{
    public int Id { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }
    public int ClientDatabaseId { get; set; }

    public ClientDatabase ClientDb { get; set; }
}

public class ClientDatabase
{
    public int Id { get; set; }
    public string DataSource { get; set; }
    public string FailoverPartner { get; set; }
    public string InitialCatalog { get; set; }
}

Donde un usuario tiene una relación entre padres e hijos con un clientDatabase a través del usuario de la clave extranjera. CLIENTDATABASEID. La propiedad de ID tanto en el usuario como en el cliente y el cliente son columnas de identidad. Mi interfaz UOW se define de la siguiente manera:

public interface IUnitOfWork
{
    void MarkDirty(object entity);
    void MarkNew(object entity);
    void MarkDeleted(object entity);
    void Commit();
    void Rollback();
}

En algún momento, dentro del mismo iunitofwork quiero llamar a MarkNew () tanto para un ClientDatabase como para un usuario y luego cometer (). Ahora, lo que quiero que suceda es que el ClientDatabase se guarde primero (entidad infantil) y luego para la ID que se estableció en ClientDatabase, como resultado de su inserción de la base de datos, se establece como la propiedad de la clave externa de ClientDatabaseid en el usuario antes que el usuario. Luego se inserta en la base de datos. Me preguntaba si alguien había resuelto este tipo de problema de manera genérica.

¿Fue útil?

Solución

¿Por qué no usas tu clase de usuario como un Raíz agregada. Por lo tanto, antes de hacer un inserto en la base de datos para el código, verificará si el ClientDatabase no es nulo. Si no es NULL, puede verificar la propiedad de ID para ver si es un nuevo ClientDatabase o una existente (para decidir si necesita hacer una inserción o una actualización). Luego podría completar la propiedad ClientDatabaseId.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top