簡體   English   中英

使用實體框架和存儲庫正確實施DAL

[英]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目錄。 通過使用相對路徑或更改代碼中的位置,可以為數據庫文件使用其他位置。

以下鏈接應提供更多詳細信息:

MSDN

SQL Express連接字符串-相對於應用程序位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM