从四月份开始接触web开发,至今已经有一段时间了。之前一直忙于在做项目,每天加班加点,包括周末。现在项目总算上线了,有了点喘息的机会,回过头看,其实我对后端的东西懂得其实还很少,于是决定自己抽点时间琢磨一些东西。第一个让我困扰的便是ASP.NET Dynamic Data 实体网站,我压根不知道这是什么东东,问身边的同事也不知道,可见这不是一个常用的网站,但是我还是很好奇这到底是做什么用的,于是就有了我的这篇文章。
一、用途
ASP.NET Dynamic Data 实体网站是基于动态数据的,ASP.NET 动态数据允许您通过在运行时从数据库架构推断数据实体的外观和行为并从中派生 UI 行为,创建可扩展的、数据驱动的 Web 应用程序。动态数据支持基架,通过基架可以为数据库中的每个表自动生成网页。 基架使您可以基于数据架构创建用于查看和编辑数据的功能性网站。也就是说ASP.NET Dynamic Data 实体网站会根据数据库结构推断出网页该如何显示,通过网页可以很清楚的知道数据的结构,看到数据库的数据,并且在网页上可以直接操作数据的数据,修改结果直接影响到数据库的数据,效果图如下:
二、创建
知道了有什么用,那接下来就要去了解要怎么用了。首先我们要创建这样一个项目,创建流程:文件-新建-网站-ASP.NET Dynamic Data 实体网站,如下图:
创建完之后我试着运行了一下,会报如下的错误,提示得已经很清楚了,原因是没有注册数据模型。那么问题来了,我们要怎么注册数据模型呢?这便是我们下面要讲的问题。
三、注册数据模型
如何注册数据模型?这个问题也困扰我很久,我在网上搜索了好久都没有搜索到关于如何创建实体网站的例子,不过最终我还是在MSDN上找到了我所需要的资料,链接如下:https://msdn.microsoft.com/zh-cn/library/cc488469.aspx。虽然找到了相关资料,但是还是遇到了不少的坑,所以我觉得还是很有必要写这么一篇文章,希望对感兴趣的人有所帮助,废话不多说,继续。
3.1 用sql server 建一个用于测试的数据库,我建了一个名字为DynamicDB的数据库用于测试。
3.2 向项目中添加数据库文件
方式一、直接通过连接SQL Server 服务器或附件数据库到SQL Server的方式添加数据模型,通过这种方式添加的话不会生成副本,对数据进行修改时会直接影响到原始数据库。
操作:解决方案-右键-添加-添加新项-ADO.NET 实体数据模型-添加。
点确定会弹出一个提示框提示相关文件应该放在App_Code中,选择是则会新建一个App_Code文件夹,并且数据库文件也会放在其中,选择否则会放在主目录下,建议点击是,好处就是便于文件归类。
选择是或否之后会弹出一个框,让你选择数据模型内容,第一个是根据已有数据库产生的设计器,第二个是空的设计器,先新建设计器再关联数据库,第三第四个没试过,而且需要更改的版本要求,在这里选择第一个。
点击下一步会弹出选择数据库的选择框,如果之前有连接过会出现之前的连接,如下第二个图,如果是第一次连接的话会出现如下第一个图,在这里要选择数据源,第一个是连接到数据库,第二个是附件数据库文件到SQL Server服务器,该文件不能为目标SQL Server服务器的数据库。
点击继续之后,会弹出一个框让你选择要连接的数据库,在这里需要填写一些必要的信息,点击更改可以更改数据源
这里选择数据库服务名的时候,可能会出现找不到我们本机的SQL Server,这是因为我刚刚把sql server的进程关掉了,这时重新电脑之后便会有了,或是启动服务中的sql server,如下图。
注意,这里的附加数据库文件其实和另一种数据源方式是一样的,所以也不能是目标SQL Server 服务器中的数据库。
点击确定之后按照流程往下走
确保选中了“将 Web.Config 中的实体连接设置另存为”复选框。可以保留默认的连接字符串名称。
选择“表”节点以选择数据库中的所有表。可以保留默认模型命名空间。点击完成则添加成功。
方式二、先添加数据库文件,然后再创建数据模型。(注意:这里添加数据库文件会创建一个数据库副本,你对数据的所有修改只会影响到副本的数据)
(注意,数据库文件一定要放在App_Data文件夹内,不然添加数据模型的时候会关联不到)
操作:App_Data文件夹-右键-添加-现有项,找到想添加的数据库文件,后缀名.mdf。这里去找我刚刚创建的DynamicDB数据库,SQL Server 穿件的数据库默认的存储路径是:C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA 当进入这个目录的时候显示“没有与搜索条件匹配的项”,原因是搜索的文件后缀名不对,选择数据库文件的后缀就会出现数据库文件了,如图:
此时,选择我刚刚创建的DynamicDB数据库,问题又来了,提示了这个东东
看到这个提示的时候,我首先想到的是应该是我SQL Server 没有关掉的原因,可是当我把SQL Server 关掉重新试的时候还是不行,所以我选择了查看当前有哪些进程在运行,在进程窗口中发现了sql server 的进程,果断关掉重试,顺利添加成功。解决方法如下图:
添加完数据库之后,接下来是要添加数据模型,添加数据模型的操作和方式一的操作一样,同样是:解决方案-右键-添加-添加新项-ADO.NET 实体数据模型-添加。。不一样的是在选择数据连接页面会自动关联到你添加的数据库文件,如下图
3.3 注册数据上下文
1.打开Global.asax文件
2.取消以下代码的注释
3.取消注释之后会报如下错误
这时你需要import 相应的命名空间<%@ Import Namespace="System.Data.Entity.Infrastructure" %>,把YourDataContextType 替换成你的数据上下文,可以从xxx.Context.cs文件里面看,如下图
到此,数据上下文已经注册完成了,试着运行一下会报如下错误,此时只需要把ScaffoldAllTables = false 改为 ScaffoldAllTables = true就可以了
运行得到如下效果图
如果插入数据的时候报以下错误:无法更新 EntitySet“SoreInfo_Table”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操
那是因为实体中的表必须有主键,可以按下列方法解决:主键设置好后,先从EF中删除刚设置主键的模型,然后再重新添加到EF中。
以上便是创建ASP.NET Dynamic Data 实体网站的完整过程,希望对有兴趣的网友有一定帮助,有错误或不足的地方还请各位提出,谢谢!