기본 헬퍼, 사용자 기능 등 모든 프로젝트에 필요한 것들을 포함하는 MVC4 "템플릿"을 만들었습니다.여러 프로젝트에서 DbContext 분리하기
컨트롤러/모델/뷰, 비즈니스 계층 및 데이터 계층의 세 부분으로 구성된 부품을 분리하려고합니다.
이제 데이터 레이어 부분을 꺼내 개인 Nuget 패키지가 될 별도의 프로젝트에 배치하는 문제에 직면했습니다.
그러나 패키지는 실제 프로젝트 웹 사이트의 DataLayer에 있기 때문에 DbContext
에 대해 알 수 없습니다.
웹 사이트에 대한 DbContext는 현재 다음과 같습니다
public class DataContext : DbContext
{
....
public DbSet<Language> Languages { get; set; }
public DbSet<User> Users { get; set; }
....
public DbSet<Reservation> Reservations { get; set; }
....
}
Languages
및 Users
는 별도의 프로젝트/NuGet 패키지로 이동하고이 사이트의 특정와 같이 Reservations
웹 사이트에 남아있을 것입니다.
Languages
및 Users
테이블은 서로에 대한 참조가 없지만, 두 User
와 Language
참조를 Reservations
갖는다.
마이 그 레이션을 포함하여 완전한 코드 우선 모델을 유지하기위한 옵션은 무엇입니까? 별도로 NuGet/NuGet 프로젝트마다 복수 DbContext
을 생성 할 수 있습니까? 코드를 처음으로 마이그레이션하면이 문제를 해결할 수 있습니까? 더 좋은 방법이 있습니까?
문제는 동일한 "백도어"를 사용하는 웹 사이트가 여러 개있는 것입니다. 버그가 업데이트되면이 모든 프로젝트를 거쳐 소스의 버그를 업데이트해야합니다. 패키지를 사용하면 그 문제는 발생하지 않습니다. – YesMan85
리포지토리 모델과 인터페이스를 사용하여 실제 구현을 분리해야합니다. 이렇게하면 프런트 엔드 사이트에서 구현 세부 정보 (EF Context)를 숨길 수 있습니다. 따라서 DataContext를 프론트 엔드에 노출하는 대신 IBackofficeService 또는 유사한 것을 반환합니다. 그런 다음 DataContext를 사용하여 해당 인터페이스를 만들고 구현합니다. 또한 일종의 IoC (Inversion of Control) 라이브러리 인 Unity를 사용하는 것을 고려해야합니다. 구현을 등록하고 MVC에서이 MyController (IBackofficeService 서비스)와 같은 컨트롤러를 만들 수 있습니다. – Woland
EF와 같은 접근법을 구현하는 방법에 대한 안내서입니다. http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of -work-patterns-in-an-asp-net-mvc-application을 사용합니다. 저장소 모델 [virtocommerce] (http://virtocommerce.codeplex.com) – Woland