Разделить идентичность 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.
Это было бы хорошим началом.