【发布时间】:2015-04-09 20:48:47
【问题描述】:
我在使用单独的 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|吗?
【问题讨论】:
-
你能把你的连接字符串也贴出来吗?
-
请参阅原始问题中的编辑。提前感谢您的帮助!
-
您的 DatabaseContext 类是否必须命名为 NriDatabaseContext 才能自动使用此连接字符串?此外,我熟悉的实体框架连接字符串有一个连接字符串属性提供程序属性。这是我的一个例子(有一些删减):
connectionString="metadata=res://*/ConanEntityModel.csdl|res://*/ConanEntityModel.ssdl|res://*/ConanEntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;App=EntityFramework&quot;" providerName="System.Data.EntityClient" -
不知道 mdf 位或
|DataDirectory|。我以前没有附加 mdf,我一直都安装了 SQL Express 的实例。
标签: c# asp.net-mvc entity-framework asp.net-web-api