VS2008 SP1之“动态数据 Web 应用程序”——管理数据库太容易了!

原本我以为安装了VS2008 SP1,内置了ADO.NET Entity Framework,MVC框架什么的,结果ADO.NET Entity Framework是有,但是MVC没有,却意外的有另外一个东西——动态数据 Web 应用程序。如图1.

 


图1

好奇地创建了个“动态数据实体 Web 应用程序”。如图2.


图2

给我的第一感觉是,MVC换名字了?不应该吧!于是打开Global.asax文件看看是不是和MVC一样。如代码1.

 

代码1
using System;
using System.Web.DynamicData;
using System.Web.Routing;

namespace WebApplication1
{
public class Global : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
MetaModel model
= new MetaModel();

// 重要: 数据模型注册
// 取消注释此行以注册 LINQ to SQL 类或 ASP.NET 实体数据的
// ADO.NET 动态数据模型。若要设置 ScaffoldAllTables = true,需符合以下条件,
// 即确定希望数据模型中的所有表都支持支架(即模板)
// 视图。若要控制各个表的支架,请为表创建分部类,并将
// [Scaffold(true)] 属性应用于分部类。
// 注意: 请确保将“YourDataContextType”更改为应用程序的数据上下文类的
//名称。
//model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false});

// 下面的语句支持分页模式,在这种模式下,“列表”、“详细”、“插入”
//和“更新”任务是使用不同页执行的。若要启用此模式,请取消注释下面
//的 route 定义,并注释掉后面的合并页模式部分中的 route 定义。
routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
Constraints
= new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
Model
= model
});

// 下面的语句支持合并页模式,在这种模式下,“列表”、“详细”、“插入”
//和“更新”任务是使用同一页执行的。若要启用此模式,请取消注释下面
//的 routes,并注释掉上面的分页模式部分中的 route 定义。
//routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
// Action = PageAction.List,
// ViewName = "ListDetails",
// Model = model
//});

//routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
// Action = PageAction.Details,
// ViewName = "ListDetails",
// Model = model
//});
}

void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}

}
}

 

感觉太像了,太神奇了,MVC换名字了?于是在IIS上添加了该站点,访问报“没有可访问的表。确保在 Global.asax 中注册了至少一个数据模型并启用了支架,或者实现自定义页面。”错误。肯定是没有设置数据的原因,现在发愁了,到底怎么设啊,只知道是在Global.asax里设置。

找到报错的地方,在Default.aspx.cs文件中,如代码2.

 

代码2
protected void Page_Load(object sender, EventArgs e)
{
System.Collections.IList visibleTables
= MetaModel.Default.VisibleTables;

if (visibleTables.Count == 0)
{
throw new InvalidOperationException("没有可访问的表。确保在 Global.asax 中注册了至少一个数据模型并启用了支架,或者实现自定义页面。");
}
Menu1.DataSource
= visibleTables;
Menu1.DataBind();
}

 

估计是在Global.asax里设置Metamodel的数据库连接了。转到Global.asax文件。看到注释里有“重要: 数据模型注册”。取消第29行

//model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false });

语句的注释。typeof(YourDataContextType)这里像是什么?很想Linq To Sql的名字***DataContext是不是?呵呵,建立一个Linq To Sql模型。然后把Linq To Sql的上下文注册到这里来。报错了,错误是,无法把Linq To Sql的DataContext转换到System.Data.Objects.ObjectContext类型。想起来ADO.NET Entity Framework也有这东西,于是创建一个。

根据向导生成文件后,得到一个设计界面。如图3.

图3

 

图非常漂亮,呵呵。不管它,把YourDataContextType替换为创建的上下文。

model.RegisterContext(typeof(NShip.DAL.NShipEntities), new ContextConfiguration() { ScaffoldAllTables = false });

编译后访问,报错,调试一下发现MetaModel里有表了但是没有可见表。就是MetaModel.Default.Tables有现在数据库里的表了,但是MetaModel.Default.VisibleTables没有数据。可以通过循环的方式把MetaModel.Default.Tables里的表填充到MetaModel.Default.VisibleTables里,还可以让不想填充进去的不进去。而如果要全部指定,设置上面代码的ScaffoldAllTables = false 换成 ScaffoldAllTables = true。OK,再访问,出现图4:

注意:如果在另外一个项目中创建ADO.NET Entity Framework数据库映射,那么需要在WEB项目中引用System.Data.Entity.

图4

图4显示的表名就是我数据用ADO.NET Entity Framework映射的表。现在点开一个查看,如图5。

图5

看看浏览器上的地址,是被重写过的,看来和MVC还是有点联系的地方。而重写的方法,刚才在Global.asax文件中也能看个大概。其它就不多说了,还是你自己去尝试吧,用这个东西做个数据库管理的后台实在是太简单了,太简单了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值