![](/img/trans.png)
[英]Correct implementation of UnitOfWork and Repository pattern in Entity Framework
[英]Correct implementation of DAL with Entity Framework & Repository
我在使用單獨的DAL項目設置MVC / WebAPI項目時遇到了一些困難和困惑。
我有一個名為“ Dashboard.Data”的類庫項目,在該項目中,我對現有數據庫生成了代碼優先的代碼。 現在,該類庫包含我的所有模型類以及我的存儲庫。 我尚未實現通用存儲庫,但到目前為止我仍然可以使用。
庫:
namespace Dashboard.Data.Repository
{
public class ProductRepository : IProductRepository, IDisposable
{
private DatabaseContext _context;
public ProductRepository()
{
_context = new DatabaseContext();
}
public ProductRepository(DatabaseContext context)
{
this._context = context;
}
public async Task<IEnumerable<Department>> GetDepartmentList()
{
return await _context.Departments.ToListAsync();
}
protected void Dispose(bool disposing)
{
if (disposing)
if (_context != null)
{
_context.Dispose();
_context = null;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}
IRepository:
namespace Dashboard.Data.Repository
{
public interface IProductRepository: IDisposable
{
Task<IEnumerable<Department>> GetDepartmentList();
}
}
現在,我有一個單獨的MVC / WebAPI項目,在這里嘗試使用存儲庫。
我的APIController:
namespace Dashboard.Controllers
{
public class ProductsAPIController : ApiController
{
protected IProductRepository repository { get; set; }
public ProductsAPIController()
{
this.repository = new ProductRepository();
}
[Route("api/Departments")]
public async Task<IHttpActionResult> GetDepartmentList()
{
var departments = await repository.GetDepartmentList();
return Ok(departments);
}
}
}
但是,當我在api中調用GetDepartmentList()時,我注意到我的存儲庫上下文不包含任何數據。 它顯示“枚舉未產生結果”消息。
我擔心設置解決方案時會感到困惑。
可能是錯誤的連接字符串嗎? 雖然看起來確實可以查看數據庫。 我覺得我只是注入了不正確的上下文,但不確定在哪里或如何解決此問題。
另外,我正在運行本地數據庫文件(.mdf)。 該文件應位於何處? 我目前在Dashboard.Data文件夾中有它...應該在主項目的App_Data文件夾中嗎?
編輯1
我注意到MVC項目在App_Data文件夾中創建了一個新的空.mdf文件。 我的MVC的web.config和DAL中的app.config都有此連接字符串
我的連接字符串:
<connectionStrings>
<add name="NriDatabaseContext" connectionString="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\NRI_Database.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
是因為| DataDirectory |嗎?
不知道這是否是正確的實現方式,但是我繼續將Mmd項目中的.mdf移至App_Data,然后重新創建了指向該文件的連接字符串。
遷移和數據訪問現在似乎都可以進行。 希望這是正確的解決方案。
連接字符串的DataDirectory
部分將自動替換Web應用程序中的App_Data
目錄。 通過使用相對路徑或更改代碼中的位置,可以為數據庫文件使用其他位置。
以下鏈接應提供更多詳細信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.