Frage

Ich benutze einen Mikromormer (Dapper) und versuche, eine Implementierung einer Arbeitseinheit (UOW) für meine Repositorys zu entwickeln. Ich bin ein bisschen verblüfft, wie ich in meinem Uow am besten mit Eltern-Kind-Beziehungen (Fremd Key) umgehen kann. Also, wenn ich beispielsweise die folgenden zwei Entitäten habe, die direkt an Datenbanktabellen zugeordnet sind:

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

Wo ein Benutzer über die Eltern-Kind-Beziehung zu einer Clientdatabase über den fremden Schlüsselbenutzer besteht.ClientDatabaseId. Die ID -Eigenschaft für Benutzer und ClientDatabase sind Identitätsspalten. Meine Uow -Schnittstelle ist wie folgt definiert:

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

Irgendwann möchte ich MarkNew () sowohl für eine ClientDatabase als auch für einen Benutzer und dann () in derselben iunitofwork nennen. Nun, was ich passieren möchte, ist, damit die ClientDatabase zuerst gespeichert wird (untergeordnete Entität) und dann für die ID, die auf ClientDatabase festgelegt wurde wird dann auch in die Datenbank eingefügt. Ich habe mich nur gefragt, ob jemand diese Art von Problem auf eine schöne generische Weise gelöst hatte.

War es hilfreich?

Lösung

Warum verwenden Sie Ihre Benutzerklasse nicht einfach als Aggregierte Wurzel. Bevor Sie also einen Einfügen in die Datenbank für den Code durchführen, prüft es, ob die ClientDatabase nicht null ist. Wenn nicht NULL, können Sie die ID -Eigenschaft überprüfen, um festzustellen, ob es sich um eine neue Clientdatabase oder eine vorhandene handelt (um zu entscheiden, ob Sie einen Einsatz oder ein Update durchführen müssen). Sie können dann die ClientDatabaseId -Eigenschaft bevölkern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top