Несколько контекстов базы данных при использовании шаблона хранилища

Я немного растерялся прямо сейчас ... Я никогда не видел столь разнородной информации относительно решения проблемы. Но давайте начнем с самого начала.

Я использую ASP.NET MVC с репозиториями, внедренными в контроллеры, благодаря Ninject. У меня есть две простые сущности: администратор со списком созданных записей в блоге и записи с одним виртуальным полем администратора.

Администратор:

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
}

Вступление:

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

Вы, наверное, знаете, куда это идет, так как эта проблема ... "классическая" в stackoverflow.

В контроллере я хочу привязать один объект к другому:

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

repEntries.AddEntry(entry);

В хранилище:

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

Конечно, я не могу этого сделать из-за знаменитого «На объект сущности нельзя ссылаться несколькими экземплярами IEntityChangeTracker», что является результатом наличия отдельных контекстов базы данных в каждом хранилище.

Когда я искал решение, я уже знал, что, вероятно, лучший способ решить его - это использовать один общий контекст. И тогда я обнаружил образец Единицы Работы. Но вот когда начинаются настоящие проблемы.

На многих сайтах решение этой проблемы несколько иное.Репозитории должны иметь общий универсальный интерфейс (который я не хочу использовать, потому что мне не нужно, чтобы каждая операция CRUD выполнялась на каждом объекте, плюс иногда мне нужны дополнительные методы, такие как «IfExists» и т. Д.)На нескольких сайтах я читал, что вся эта абстракция не нужна, поскольку абстракция уже предоставляется Entity Framework, а UoW реализован в DbContext (что бы это ни значило)Шаблон «Единица работы» (по крайней мере, из примеров в Интернете) кажется мне настоящей болью ...

Мне нужно руководство ... Я изучаю ASP.NET MVC всего год. Мне кажется, что это «триумф формы над содержанием». Так как...Мне просто нужно привязать один объект к другому. Я начинаю думать, что было бы лучше, когда у меня просто был объект контекста в контроллере, и мне не нужно было строить Эйфелеву башню, чтобы достичь того, что упомянуто выше: \ Однако мне нравится идея репозиториев ...

Ответы на вопрос(2)

Ваш ответ на вопрос