一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序,Part 5
本文根据《Professional ASP.NET MVC 1.0》中微软牛人Scott Guthrie 提供免费下载的第一章,一步一步演示如何通过ASP.NET MVC 1.0 正式版创建NerdDinner 范例程序。对了解如何使用最新的ASP.NET MVC 1.0框架创建Web Application 非常有帮助。本文由
http://forum.entlib.com 开源论坛小组提供。关于本文的一些资源,请参考文章最后的链接。
前面系列文章:
本文继续学习之旅,一步一步通过ASP.NET MVC 1.0 实现NerdDinner 范例程序。
NerdDinnerDataContext 类
Visual Studio 自动生成.NET类,表示LINQ to SQL设计器创建的模型和数据库关系,同时也会每一个LINQ to SQL设计器文件生成LINQ to SQL DataContext 类。因为,我们命名LINQ to SQL类为NerdDinner,创建的DataContext类将命名为NerdDinnerDataContext,NerdDinnerDataContext类将是我们与数据库交互的基本方式。
NerdDinnerDataContext类公开了2个属性- Dinners和RSVPs,分别表示建模的2个数据表。我们使用C#写LINQ查询语句访问这些属性,从数据库去查询和检索Dinner 和RSVP对象。如下的代码演示如何实例化NerdDinnerDataContext 对象,并执行LINQ 查询,获取系列Dinners对象。
NerdDinnerDataContext对象跟踪对Dinner和RSVP对象的所有变更,允许我们轻松保存变更到数据库中。下面的代码演示如何使用LINQ查询从数据库中检索一个单一的Dinner对象,更新其中2个属性,接着保存变更到数据库。
代码中的NerdDinnerDataContext对象自动跟踪对Dinner对象的所有属性变更。当我们调用SubmitChanges() 方法时,它对数据库执行合适的SQL Update语句,将新的数据更新到数据库。
创建DinnerRepository类
对于一个小应用程序而言,有时让Conrollers类直接使用LINQ to SQL DataContext类,并将LINQ 查询语句写在Controllers中。但随着应用程序越来越大,这一方法的维护和测试将变得麻烦,并且导致重复的LINQ查询在多个地方出现。
让维护和测试更方便的方法是使用Repository 模式。Repository类帮助封装数据查询和存储逻辑,从应用程序中抽象隔离具体的数据存储实现。除了是应用程序代码更加简洁外,使用Repository模式使将来更改数据库存储实现更加方便,并且有助于在没有真实数据库的情况下,进行应用程序进行单元测试。
对NerdDinner应用程序,我们将定义一个DinnerRepository类,类的原型如下:
备注:在本章后面部分,我们将从这个类中提取IDinnerRepository 接口,允许在Controllers类实现依赖注入(Dependency Injection)。但在开始的时候,我们将开始一个简单的、直接工作的 DinnerRepository类。
为了实现这个类,右键点击Models文件夹,选择Add -> New Item菜单项。在Add New Item对话框,我们选择Class 模板,并命名文件为DinnerRepository.cs。呵呵,终于又回到NerdDinner应用程序了。
接下来,我们实现DinnerRepository 类,示例代码如下:
public class DinnerRepository
{
private NerdDinnerDataContext db = new NerdDinnerDataContext();
//
// Query Methods
public IQueryable<Dinner> FindAllDinners()
{
return db.Dinners;
}
public IQueryable<Dinner> FindUpcomingDinners()
{
return from dinner in db.Dinners
where dinner.EventDate > DateTime.Now
orderby dinner.EventDate
select dinner;
}
public Dinner GetDinner(int id)
{
return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}
//
// Insert/Delete Methods
public void Add(Dinner dinner)
{
db.Dinners.InsertOnSubmit(dinner);
}
public void Delete(Dinner dinner)
{
db.RSVPs.DeleteAllOnSubmit(dinner.RSVPs);
db.Dinners.DeleteOnSubmit(dinner);
}
//
// Persistence
public void Save()
{
db.SubmitChanges();
}
}
相关资源下载链接:
1. ASP.NET MVC 1.0 正式版发布了!!!
2. 免费ASP.NET MVC eBook 向导-电子书下载