Mehrere Datenbankkontexte bei Verwendung des Repository-Musters

Ich bin gerade ein bisschen verloren ... Ich habe noch nie so unterschiedliche Informationen bezüglich der Lösung des Problems gesehen. Aber fangen wir von vorne an.

Ich verwende ASP.NET MVC mit Repositorys, die dank Ninject in Controller eingefügt wurden. Ich habe zwei einfache Entities: Admin mit einer Liste der erstellten Blog-Einträge und Entries mit einem virtuellen Admin-Feld.

Administrator

public class Admin
{
    [Key, ScaffoldColumn(false)]
    public int Id { get; set; }

    [Required(ErrorMessage = "Zły login.")]
    [StringLength(20), MinLength(3)]
    [RegularExpression(@"^[a-zA-Z0-9]*$", ErrorMessage = "Special characters are not allowed.")]
    public string Login { get; set; }

    [Required(ErrorMessage = "Złe hasło.")]
    [StringLength(20, MinimumLength = 3)]
    [DataType(DataType.Password)]
    [Display(Name = "Hasło")]
    public string Password { get; set; }

    public virtual List<Entry> CreatedEntries { get; set; } // napisane aktualności przez danego admina
}

Eintrag

public class Entry
{
    [Key, ScaffoldColumn(false)]
    public int Id { get; set; }

    [StringLength(200, MinimumLength = 2)]
    [DataType(DataType.Text)]
    [Display(Name = "Tytuł")]
    public string Title { get; set; }

    [Required, StringLength(2000), MinLength(3)]
    [Display(Name = "Treść")]
    [UIHint("tinymce_jquery_full"), AllowHtml]
    public string Text { get; set; }

    public virtual Admin Admin { get; set; }
}

Sie wissen wahrscheinlich, wohin es geht, da dieses Problem bei Stackoverflow ... "klassisch" ist.

In der Steuerung möchte ich ein Objekt an ein anderes binden:

entry.Admin = repAdmins.GetAdmin(User.Identity.Name);

repEntries.AddEntry(entry);

Im Repository:

public void AddEntry(Entry entry)
    {
        db.Entries.Add(entry);
        db.SaveChanges();
    }

Natürlich kann ich das nicht tun, weil das berühmte "Ein Entity-Objekt kann nicht von mehreren Instanzen von IEntityChangeTracker referenziert werden", was darauf zurückzuführen ist, dass in jedem Repository separate Datenbankkontexte vorhanden sind.

Als ich nach einer Lösung suchte, wusste ich bereits, dass es wahrscheinlich am besten ist, einen gemeinsamen Kontext zu verwenden. Und dann entdeckte ich das Muster der Arbeitseinheit. Aber hier beginnt das eigentliche Problem.

Auf vielen Websites ist die Lösung dafür etwas anders.Die Repositorys müssen über eine gemeinsame generische Schnittstelle verfügen (die ich nicht verwenden möchte, da nicht jede CRUD-Operation für jede Entität ausgeführt werden muss, und manchmal sind zusätzliche Methoden wie "IfExists" usw. Erforderlich.)uf einigen Sites habe ich gelesen, dass diese gesamte Abstraktion nicht benötigt wird, da die Abstraktion bereits mit Entity Framework bereitgestellt wird und UoW in DbContext implementiert ist (was auch immer das bedeutetDas Muster der Arbeitseinheit (zumindest anhand von Beispielen im Internet) scheint mir ein echtes Problem zu sein ...

Ich brauche eine Anleitung ... Ich lerne ASP.NET MVC erst seit einem Jahr. Für mich scheint es ein "Triumph der Form über den Inhalt" zu sein. Weil... Ich muss nur ein Objekt an ein anderes binden. Ich fange an zu denken, dass es besser war, wenn ich einfach ein Kontextobjekt im Controller hatte und keinen Eiffelturm bauen musste, um das oben Genannte zu erreichen: \ Allerdings mag ich die Idee von Repositories ...

Antworten auf die Frage(4)

Ihre Antwort auf die Frage