Vários contextos de banco de dados ao usar o padrão de repositório

Estou um pouco perdido agora ... Nunca vi essa informação tão divergente quanto à solução do problema. Mas vamos começar do começo.

Estou usando o ASP.NET MVC com repositórios injetados nos controladores, graças ao Ninject. Eu tenho duas entidades simples: Admin com uma lista de entradas de blog criadas e Entradas com um campo Admin virtual.

Admin:

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
}

Entrada:

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

Você provavelmente sabe para onde está indo, já que esse problema é ... "clássico" no stackoverflow.

No controlador, quero vincular um objeto a outro:

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

repEntries.AddEntry(entry);

No repositório:

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

É claro que não posso fazer isso, devido ao famoso "Um objeto de entidade não pode ser referenciado por várias instâncias do IEntityChangeTracker", que é o resultado de ter contextos de banco de dados separados em cada repositório.

Quando eu estava procurando uma solução, já sabia que provavelmente a melhor maneira de resolvê-la é usar um contexto comum. E então eu descobri o padrão da Unidade de Trabalho. Mas é aqui que os problemas reais começam.

Em muitos sites, a solução para isso é um pouco diferente.Os repositórios devem ter interface genérica comum (que eu não quero usar, porque não preciso ter cada operação CRUD em cada Entidade, além disso, às vezes, preciso ter métodos extras, como "IfExists" etc.)Em alguns sites, li que toda essa abstração não é necessária, pois a abstração já é fornecida com o Entity Framework e a UoW é implementada no DbContext (o que isso significa)O padrão da Unidade de Trabalho (pelo menos a partir de exemplos na Internet) parece ser uma verdadeira dor para mim ...

Preciso de algumas orientações ... Aprendo o ASP.NET MVC por apenas um ano. Para mim, parece que é um "triunfo da forma sobre o conteúdo". Porque...O que eu simplesmente preciso é vincular um objeto a outro. Estou começando a pensar que era melhor quando eu simplesmente tinha um objeto de contexto no Controller e não precisava construir a Torre Eiffel para alcançar o que foi mencionado acima: \ No entanto, eu gosto da ideia de repositórios ...

questionAnswers(2)

yourAnswerToTheQuestion