Разделить идентичность asp.net на 2 проекта (веб-сайт и данные)

Я понял, что было бы неплохо разделить часть веб-сайта (mvc) и часть данных на 2 разных проекта. Я также хочу использовать контекст для каждого запроса (если возможно, в контексте).

Первый настоящий вопрос: почему я должен или не должен делать это.

И второй вопрос: я получаю ошибку так, как я это делаю сейчас. Я могу решить это, установив пакет Entity Framework от NuGet. Но тогда у меня есть идея, что я все еще буду смешивать вещи. Сайт знает, что использует Entity Framework.

Error: The type 'Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Identity.EntityFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

Код:

public static Login.Data.ApplicationUserManager CreateApplicationUserManager(IdentityFactoryOptions<Login.Data.ApplicationUserManager> options, IOwinContext context)
{
  Login.Data.ApplicationUserManager manager = new Login.Data.ApplicationUserManager(context.Get<AppContext>());      
  return manager;
}

И класс AppContext:

public class AppContext : IdentityDbContext<ApplicationUser>, IDisposable
  {
    public AppContext()
      : base("MemberContext")
    {
    }

    public static AppContext CreateAppContext()
    {
      return new AppContext();
    }
  }

1 ответ

Решение

Разделить asp.net личность на 2 проекта. Первый настоящий вопрос: почему я должен или не должен делать это.

Вам определенно следует отделить свое веб-приложение от уровня "Службы" и "База данных" (поэтому, если вы собираетесь разделять проекты, вам нужно 3, а не 2). Но вам не хватает уровня Services, который отвечал бы за извлечение и преобразование объектов базы данных в бизнес-объекты / доменные объекты и передавал эти объекты в ваше веб-приложение (а не объекты базы данных, для которых требуется EF).

И второй вопрос: я получаю ошибку так, как я это делаю сейчас. Я, вероятно, могу решить эту проблему, установив пакет Entity Framework от NuGet. Но тогда у меня есть идея, что я все еще буду смешивать вещи. Сайт знает, что использует Entity Framework.

Если ваше веб-приложение получает прямой доступ к контексту данных, то оно должно знать о Entity Framework и ASP.NET Identity для EF, следовательно, вы получаете ошибку.

Создайте слой служб (новую библиотеку классов), создайте ссылку на проект базы данных и добавьте Entity Framework в этот слой служб, а затем используйте этот слой для извлечения данных из базы данных и преобразования этих объектов в бизнес-объекты.

Передайте бизнес-объекты (а не объекты EF) в свое веб-приложение. Затем в вашем веб-приложении обратитесь к библиотеке классов Services.

Это было бы хорошим началом.

Другие вопросы по тегам