繁体   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