ASP.NET/Entity Frameworkコアで基本的なUoW/Repositoryパターンを実装しようとしていますが、非常に問題が発生しました。.NETコアで間接参照されるパッケージのクラスを表示する
私のソリューションは合計4つのプロジェクトで構成されています。私のDbContextが定義されている
.DAL私のエンティティクラスが定義されているプロジェクト、および:
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参照ファサードとファサード.EFエンティティフレームワークNOT 6.1.3。 NOR .DALプロジェクト。ビルド時にEFアセンブリが自分のbinフォルダに追加されても、EFはこのプロジェクトで直接参照されません。 の.NET Framework 4.6.xので
。私はのDemoAppにApplicationDbContextに対してコードにしてみてくださいしようとした場合、それはそのクラスが定義されていない私に語った、私に期待されている追加する任意のusingsを提供していません動作。
私は(Entity Frameworkのコアを使用することによって).NETコア1.0 RC2と同じことをしようとすると、ApplicationDbContextは完全に私を破壊する.DALプロジェクトへの直接参照を追加することなく、.DemoAppからアクセス可能です実装の詳細を隠そうとします。なぜ私はそこからクラスを参照させて頂いております -
.DALプロジェクトは直接.DemoAppプロジェクトによって参照されていませんか?
これが期待どおりの動作ですか? .NET Frameworkプロジェクトを.NET Framework 4.6.xプロジェクトと同じ動作にする方法はありますか?
誰かが正解を追加しました(PrivateAssets =すべて) - それを受け入れてください。 –
@PeterMorris私は答えを受け入れました。それを指摘してくれてありがとう! –