些代码示例,看看如何使用这些类来执行常见的数据库操作: 使用LINQ表达式执行查询
用下面的LINQ查询表达式从数据库中获取数据。下图使用了LINQ表达式来获取所有将要举行的餐会:
我们在写LINQ表达式的时候也可以利用Dinners和RSVPs存在的关系。留意下图“where”子句过滤出参加人数大于0的餐会的方式:
要注意的是上面的查询的“where”子句(即只获取至少有一人参加的餐会)是在服务器端执行的——使执行查询和加载的数据量更为高效。 获取一个实例
我们可以使用LINQ的Single()函数,加上Lamda查询来获取Dinner的一个实例,如下面的代码所示:
或者,我们也可以利用EF“代码优先”函数库提供的Find()函数,根据ID来加载一个实例:
举办新餐会
下面的代码演示了如何创建一个新的Dinner实例并把它添加到数据库中。所有我们需要做的工作就是“new”一个Dinner对象,设置它的属性,最后把它加到NerdDinner Context对象的Dinners属性中。NerdDinner Context类支持 “工作单元”的模式,即你可以在Context中添加多个模型,然后调用“SaveChanges()”以事务的方式保存所有的数据库变动。
更新餐会信息
下面的代码演示了获取一个Dinner实例,更新其中一个属性,然后将改动保存到数据库的过程:
第三步:创建使用我们的模型的ASP.NET MVC控制器
现在来看看使用模型的更完整的场景,使用一个控制器类型来公布即将到来的餐会列表,并允许用户添加新的餐会:
右键单击“Controllers”文件夹,然后选择“添加->控制器”菜单项,我们把新的控制器命名为“HomeController”。
接着添加三个“动作函数”用来处理前面使用EF“代码优先”函数库创建的NerdDinners模型:
.
“Index”动作函数加载并显示即将到来的餐会列表。
而“Create”动作函数允许用户发布新的餐会。第一个“Create”函数用来处理用户访问/HOME/Create页面时,处理“HTTP GET” 的场景,以及发一个“New Dinner”表单让用户填写。而第二个“Create”函数用来处理跟那个表单关联起来的“HTTP POST”场景—将新餐会信息保存到数据库中。如果有任何验证错误,它会重新显示表单并加上相应的错误消息。 给我们的控制器加上视图
下一步将是给项目里加两个“视图模板”——一个给“Index”,另外一个给“Create”。
把鼠标放在控制器里的Index函数里,就可以在项目中为它添加一个视图了,然后单击右键在菜单中选择“添加视图”,弹出“添加视图”对话框。我们将创建一个强类型视图,然后给它传入一个包含“Dinner”模型对象的IEnumerable列表:
单击“添加”后,Visual Studio会创建一个/Views/Home/Index.aspx文件。再添加以下这些代码——为餐会信息生成一个列表,然后显示创建餐会的链接: