我正在关注asp.net网站上的Contoso大学教程,一切正常。我的下一步是在我自己的新网站上复制一些内容。我添加了一个有效的EntityDataSource:
<asp:EntityDataSource ID="ProductTypeEntityDataSource" runat="server"
ConnectionString="name=MyWebsite2011Entities"
DefaultContainerName="MyWebsite2011Entities" EnableFlattening="False"
EntitySetName="product_type">
根据教程,最好用ContextTypeName替换ConnectionString和DefaultContainerName。
“在EntityDataSource控件的标记中,删除ConnectionString和DefaultContainerName属性,并用ContextTypeName =”ContosoUniversity.DAL.SchoolEntities“属性替换它们。这是您每次创建EntityDataSource控件时应该进行的更改,除非您需要使用与在对象上下文类中硬编码的连接不同的连接。“
在他们有一个:
的教程中,这对我来说很好 <asp:EntityDataSource ID="StudentsEntityDataSource" runat="server"
ContextTypeName="ContosoUniversity.DAL.SchoolEntities"
EnableFlattening="False"
EntitySetName="People"
EnableDelete="True" EnableUpdate="True">
</asp:EntityDataSource>
我(除了项目名称)的不同之处在于我的实体模型没有放在DAL文件夹中。相反,我接受了Visual Web Developer的默认文件夹名称建议。我相信它是“App_Code”。但ContextTypeName =“MyWebsite2011.App_Code.MyWebsite2011Entities”不起作用。当我启动浏览器时,它抱怨无法读取MyWebsite2011.App_Code.MyWebsite2011Entities类型。
<asp:EntityDataSource ID="ProductTypeEntityDataSource" runat="server"
ContextTypeName="MyWebsite2011.App_Code.MyWebsite2011Entities"
EnableFlattening="False" EntitySetName="product_type">
如何找到要放入的正确ContextTypeName?正如我所说,ConnectionString和DefaultContainerName工作,所以我猜MyWebsite2011Entities是好的。任何提示都将受到赞赏,因为我不知道命名约定或寻找什么。
答案 0 :(得分:11)
打开声明Context的.cs文件,并在namespace
声明后立即查看文本。那是你班级的命名空间。您的ContextTypeName应为<namespace>.<classname>
(当然,不包含&lt;&gt;括号。)
答案 1 :(得分:0)
我正在使用相同的Contoso大学教程,但我使用的是Windows Azure作为在线数据库 所以我也遇到了这个问题 对于其他对使用在线数据库时如何解决此问题的人,我做了以下工作。
使用您的EntityDataSource执行:
删除以下内容:
的ConnectionString = ...
DefaultContainerName = ...
添加:
OnContextCreating="EntityDataSource_ContextCreating"
将ContextTypeName留空。
最后在相应的.cs中实现以下代码:
protected void EntityDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e)
{
<ContainerName> context = new <ContainerName>();
e.Context = ((IObjectContextAdapter)context).ObjectContext;
}
ContainerName 是您的容器名称 如果我们查看原始问题,那么它将是MyWebsite2011Entities。