我想要一个 ASP.NET MVC 网站,它有一些前端用于查看、添加和其他数据。然后我想要有 Web Api 来获取移动设备的数据等等。我想首先使用 EF 的代码(我正在使用 Ninject)。我为酒店和其他人创建课程。我创建了 HotelManagerContext 并创建了数据库并且看起来不错。为此,我正在通过 HomeController 和 Repository 添加数据。当我在 Visual Studio 中查看数据库时,数据就在那里。但是当我尝试将我的 HotelsController 用于 Api 时,数据上下文是空的。怎么了?我忘记设置什么?有连接字符串的东西还是什么?
这是我的 ApiController:
public class HotelsController : ApiController
{
private IHotelRepository _hotelRepo { get; set; }
public HotelsController(IHotelRepository repo)
{
_hotelRepo = repo;
}
// GET api/Hotels
public IEnumerable<Hotel> GetHotels()
{
return _hotelRepo.GetAll();
}
// GET api/Hotels/5
public Hotel Gethotel(int id)
{
return _hotelRepo.Get(id);
}
}
这是我的前端控制器的一部分:
public class HomeController : Controller
{
private IHotelRepository _hotelRepo { get; set; }
public HomeController(IHotelRepository repo)
{
_hotelRepo = repo;
}
public ActionResult Index()
{
return View();
}
// next methods, for adding data and so
}
这是我的存储库:
public class HotelRepository : IHotelRepository
{
private HotelManagerContext db { get; set; }
public HotelRepository()
:this (new HotelManagerContext())
{
}
public HotelRepository(HotelManagerContext hotelManagerContext)
{
// TODO: Complete member initialization
this.db = hotelManagerContext;
}
public Models.Hotel Get(int id)
{
return db.hotels.SingleOrDefault(h => h.hotId == id);
}
public IQueryable<Models.Hotel> GetAll()
{
return db.hotels;
}
public Hotel Add(Hotel hotel)
{
db.hotels.Add(hotel);
db.SaveChanges();
return hotel;
}
}
这是我的 HotelManagerContext:
public class HotelManagerContext : DbContext
{
public HotelManagerContext() : base("name=HotelManagerContext")
{
}
public DbSet<Hotel> hotels { get; set; }
}
编辑:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IHotelRepository>().To<HotelRepository>();
GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel);
}
Edit2: 这是我的连接字符串:
<add name="HotelManagerContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=HotelManagerContext-20121219191411; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|HotelManagerContext-20121219191411.mdf" providerName="System.Data.SqlClient" />
而且我刚刚发现即使在 HomeController 中我也有空的数据上下文。因此,当我在服务器资源管理器中检查数据库内容时,我添加了一些数据(在 HomeController 中)。但是每次当我有请求页面(web api 或前端)时,datacontext 都是空的,我可以添加从零开始计数的项目,但在数据库中已经有下一个但无法获取。这真的很奇怪。