我在使用单独的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 |?
答案 0 :(得分:0)
不确定这是否是正确的实现方式,但我继续将.mdf移动到我的MVC项目中的App_Data,并重新创建连接字符串以指向该文件。
迁移似乎现在可以正常工作,以及数据访问。希望这是正确的解决方案。
答案 1 :(得分:0)
连接字符串的DataDirectory
部分将自动替换Web应用程序中的App_Data
目录。通过使用相对路径或更改代码中的位置,可以为数据库文件使用不同的位置。
以下链接应提供更详细的信息:
SQL Express Connection string - Relative to application location