Я пытаюсь реализовать базовый шаблон UoW/Repository с помощью ASP.NET/Entity Framework Core, и я столкнулся с очень тревожным поведением.
Мое решение состоит всего из 4 проектов.
.DAL project, где определены классы сущности и где определяется мой DbContext:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ApplicationDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
.Facade, где определены мои IUnitOfWork и IProductRepository:
public interface IUnitOfWork
{
IProductRepository Products { get; }
}
public interface IProductRepository
{
string GetName(int id);
}
.Facade.EF, где мой Фасад реализован с помощью EF:
public class UnitOfWork : IUnitOfWork
{
private ApplicationDbContext _context;
public IProductRepository Products { get; private set; }
internal ApplicationDbContext Context { get { return _context; } }
public UnitOfWork()
{
_context = new ApplicationDbContext();
Products = new ProductRepository(this);
}
}
public class ProductRepository : IProductRepository
{
private ApplicationDbContext _context;
public ProductRepository(UnitOfWork uow)
{
_context = uow.Context;
}
public string GetName(int id)
{
return _context.Products
.Where(x => x.Id == id)
.Select(x => x.Name)
.FirstOrDefault();
}
}
.DemoApp, где должен быть мой код приложения. Этот проект должен знать только об UnitOfWork и UserRepository, а не о классе ApplicationDbContext.
-
.DAL ссылки Entity Framework 6.1.3.
-
.Facade ничего не ссылается.
-
.Facade.EF ссылки. Проект DAL, проект Facade и Entity Framework 6.1.3.
-
.DemoApp ссылается на Facade и Facade.EF, но не на Entity Framework 6.1.3. Проект NOR.DAL. Несмотря на то, что сборки EF добавляются в мою папку bin при сборке, EF напрямую не ссылается на этот проект.
С .NET Framework 4.6.x., если я попытаюсь выполнить код с помощью ApplicationDbContext в DemoApp, он сообщает мне, что класс не определен и не предоставляет мне никаких добавлений, которые будут добавлены, ожидаемое поведение.
Если я попытаюсь сделать то же самое с .NET Core 1.0 RC2 (используя ядро Entity Framework), ApplicationDbContext доступен из .DemoApp без добавления прямой ссылки на проект .DAL, который полностью разрушает мою попытку для скрытия деталей реализации.
. Проект DAL напрямую не ссылается на проект .DemoApp - почему мне разрешено видеть в нем классы?
Является ли это ожидаемым поведением? Есть ли способ сделать проекты .NET Core иметь такое же поведение, что и проекты .NET Framework 4.6.x?