Question

J'utilise un micro-ORM (pimpant) et essaie de trouver une unité de mise en œuvre de travail (UOW) pour mes dépôts à utiliser. Je suis un peu déconcerté la meilleure façon de traiter les relations parents-enfants (clé étrangère) dans mon UOW. Ainsi, par exemple, si je les deux entités qui tracent directement aux tables de base de données suivants:

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; }
}

Lorsqu'un utilisateur a la relation parent-enfant avec un ClientDatabase via la User.ClientDatabaseId clé étrangère. La propriété Id sur l'utilisateur et ClientDatabase sont des colonnes d'identité. Mon interface UOW est définie comme suit:

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

À un certain moment, dans le même IUnitOfWork je veux appeler MarkNew () pour les deux un ClientDatabase et un utilisateur puis Commit (). Maintenant, ce que je veux arriver est pour le ClientDatabase à enregistrer la première (entité enfant), puis pour l'ID qui a été mis sur ClientDatabase, à la suite de celui-ci l'insertion de la base de données, à définir comme la propriété clé étrangère ClientDatabaseId sur User avant est ensuite également inséré dans la base de données. Je me demandais si quelqu'un avait résolu ce genre de problème dans une belle façon générique?

Était-ce utile?

La solution

Pourquoi ne pas utiliser simplement votre catégorie d'utilisateur comme racine globale . Donc, avant de vous faire une insertion dans la base de données pour le code vérifiera si le ClientDatabase n'est pas nul. Si non nul, alors vous pouvez vérifier la propriété Id pour voir si son nouveau ClientDatabase ou un existant (pour décider si vous devez faire une insertion ou une mise à jour). Vous pouvez alors remplir la propriété ClientDatabaseId.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top