我有一个使用EF codefirst的webforms项目来保存数据.我想使用GridView和EntityDataSource,以节省写入CRUD.这可能吗?
我可以将我的DBContext转换为EntityDataSource所期望的ObjectContext吗?
这是我试过的:
<asp:EntityDataSource ID="OrdersDataSource" runat="server" ContextTypeName="SomeNamespace.Models.ShopDBContext"
EnableFlattening="False" EntitySetName="Orders" EntityTypeFilter="Order" EnableDelete="False"
EnableUpdate="False" Include="OrderLines" OrderBy="it.Id">
</asp:EntityDataSource>
<asp:GridView ID="OrdersGridView" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="True" DataKeyNames="Id" DataSourceID="OrdersDataSource" />
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个例外:
无法将类型为"SomeNamespace.Models.ShopDBContext"的对象强制转换为"System.Data.Objects.ObjectContext".
gridview entitydatasource ef-code-first entity-framework-4.1
我最近将我们的Webforms应用程序从EF 4.4升级到EF6,并且我使用Entity Datasource控件获得了很多编译时构建错误.通常,我在尝试访问上下文对象时会出现这些错误:
e.Context
Run Code Online (Sandbox Code Playgroud)
我遵循了以下相同的演练:http://entityframework.codeplex.com/wikipage?title = Updating%20Applications%20to%20use%20EF6
出现的错误信息是:
1)模块System.Data.Entity.应引用version ="4.0.0.0"
2)类型System.Data.Objects.ObjectContext的case表达式不能键入ObjectContext(在显式类型转换为System.Data.Entity.Core.Objects.ObjectContext之后)
任何人都可以帮忙解决这个问题吗?
我正在尝试创建一个用于更新帐户详细信息的成员页面.我想用成员的数据填充表单,但我不知道如何在EntityDataSource上设置过滤器来限制查询.
当我根据成员ID设置select语句时,我收到错误
Select cannot be set if EnableDelete, EnableInsert, or EnableUpdate is enabled.
我认为这是因为你不能更新投影或其他东西,但是在这周围有什么?
或者我是否必须在Page_Load中运行查询并自己填充表单?
嗨,我有一个EntityDataSource.
我需要以编程方式发送变量(@SelectedValue)以在EntityDataSource的WHERE过滤器中使用.
你可以发一个简单的核心来告诉我该怎么做吗?谢谢你的时间!
要在EntityDataSource上创建WhereParameters,我使用以下代码:
Parameter parameter = new Parameter("SelectedValue", TypeCode.Int32, uxTreeView1.SelectedValue);
parameter.DefaultValue = "0";
uxEntityDataSourceNodes.WhereParameters.Add(parameter);`
Run Code Online (Sandbox Code Playgroud)
这里是Control的代码:
<asp:EntityDataSource ID="uxEntityDataSourceNodes" runat="server"
ConnectionString="name=TestHierarchyEntities"
DefaultContainerName="TestHierarchyEntities" EnableFlattening="False"
EnableUpdate="True" EntitySetName="CmsCategories" Where="it.CategoryId = @SelectedValue"
EntityTypeFilter="" Select="">
</asp:EntityDataSource>
Run Code Online (Sandbox Code Playgroud) 我正在使用VS 2013和SQL Svr 2012并尝试使用EF来填充gridview.由于这是一个非常简单的测试,我只有一个带有密钥和几个数据字段的表.创建模型的过程似乎工作正常 - 它在设计器视图中按预期显示,文件在app_code中创建,bin文件夹用2个dll创建,配置文件用连接字符串和其他条目更新.
当我尝试选择"命名连接"时,我收到错误"无法加载指定的元数据资源",并且它讨论了重建项目以获取程序集.
我花了几个小时阅读这样的其他案例,我无法理解:
为什么会出现这种情况,因为VS 2010从来都不是问题
如何修复连接字符串以指向它想要的资源.我完全失去了关于完全合格的装配名称的所有技术建议 - 我尝试的任何工作都没有.
如何设置一些参数以强制资源在适当的位置?我读过的所有建议似乎都与VS 2013没有太大关系
我需要决定是否应该卸载VS 2013并使用VS 2012.目前,我正在使用VS 2010和ASP 4.0,我想转向ASP 4.5并且通常跟上Microsoft技术.但是,我没有技能水平来处理有缺陷的VS版本.在我看来,这个EF执行可能是由于我的计算机上的一个错误或一些奇怪的腐败 - 我试图弄清楚是哪种情况.我在一台干净的机器上安装了VS 2013 Express和SQL Svr 2012,过去没有这些工具.
我真的很想看到一个非常熟悉Visual Studio的人尝试复制我的问题,因为它只需要几分钟就可以完成:
在MS SQL Server中,使用一个具有主键和几个数据字段的表创建一个小型DB,并填充一些测试数据 - 使用TestTable1将其命名为TinyDB.
使用VS 2013 Express for Web,使用VB创建一个"新网站",其中包含"ASP Empty Web Site"选项.
添加包含"ADO.Net实体数据模型"的ASP App_Code文件夹,并将名称保留为"模型".
从数据库生成模型并为"TinyDB"创建"新连接"并使用Entity Framework 6.0然后选择"TestTable1".注意命名空间是"TinyDBModel".单击"完成"将在App_Code,其他文件夹中生成多个项目,并更新web.config.
添加名为default.aspx的Web表单并将gridview拖到其上.在网格视图的设计模式中,选择"新数据源",然后选择"实体"选项(注意出现在default.aspx中的EntityDataSource1的名称).单击下一步,在"命名连接"下选择"TinyDBEntities" - 这是我的错误"无法加载指定的元数据资源".
请注意,VS 2010中的这个精确练习可以很好地工作,并生成一个显示正确数据的网格.
我有一个问题,只显示EntityDataSource是否存在于ASP.NET(*.aspx)页面上.有趣的是,当我刷新页面(F5或再次查看)并且它让我发疯时,它似乎是一个实体框架的错误,因为我尝试了另一个项目,我只是得到了同样的错误.
无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.异常详细信息:System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.
堆栈跟踪:
[ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) +0
System.Reflection.RuntimeModule.GetTypes() +4
System.Reflection.Assembly.GetTypes() +78
System.Data.Metadata.Edm.ObjectItemConventionAssemblyLoader.LoadTypesFromAssembly() +32
System.Data.Metadata.Edm.ObjectItemAssemblyLoader.Load() +25
System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, ObjectItemLoadingSessionData loadingData) +160
System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, KnownAssembliesSet knownAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage, Object& loaderCookie, Dictionary`2& typesInLoading, List`1& errors) +166
System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection, Assembly assembly, Boolean loadReferencedAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage) +316
System.Data.Metadata.Edm.ObjectItemCollection.ExplicitLoadFromAssembly(Assembly assembly, EdmItemCollection edmItemCollection, Action`1 logLoadMessage) +53 …Run Code Online (Sandbox Code Playgroud) .net c# entity-framework exception-handling entitydatasource
我有一个分发表,其中包含一个分配ID的pk和一个收件人表,其中RecipientID为pk.此表曾经是1对多,但现在需要使用中间表更改为多对多.
我有一个EntityDataSource,它提供了一个listview,允许简单地操作分发列表.
<asp:EntityDataSource ID="edsRecipients" runat="server" ConnectionString="name=DistributionEntities" DefaultContainerName="DistributionEntities"
EnableDelete="True" EnableFlattening="False" EnableInsert="True" EnableUpdate="True" EntitySetName="Recipients"
Where="it.[DistributionID]=@DistributionID">
<WhereParameters>
<asp:ControlParameter ControlID="ddlSelectDistributionList" ConvertEmptyStringToNull="true" DbType="Int32" Name="DistributionID" />
</WhereParameters>
</asp:EntityDataSource>
Run Code Online (Sandbox Code Playgroud)
有没有办法可以更改where子句以使用新表如果需要,新表将命名为DistributionRecipients.如果没有,我可以通过某种方式将EF类的Distribuion.Recipients绑定到后面代码中的List视图,它将使用自动编辑和删除功能,还是需要添加代码来处理它们?
asp.net listview entity-framework entitydatasource entity-framework-4
我使用EF 4,C#和MS会员提供商.
我有一个带有DataSource的GridView和一个EntityDataSource Web控件.
我想使用EntityDataSource过滤数据,过滤器显示申请当前登录用户,此值应使用MS Memebership Provider(Membership.GetUser();).
现在我不能在EntityDataSource中输入任何允许我点的那个参数(在Where /使用提供的参数自动生成Where表达式中).
你有什么想法?
请提供一些代码示例.谢谢你的时间!
我有一个非常简单的模型,我正在为使用Northwind数据库的客户端.我有一个包含三个实体的EDMX文件:产品,类别和供应商.
我正在尝试创建一个包含GridView的页面,该GridView显示产品,包括类别名称和供应商名称.使用LINQ to SQL,我可以让LinqDataSource控件返回Products实体,然后可以在GridView中使用TemplateField,如下所示:
<ItemTemplate>
<%# Eval("Category.CategoryName") %>
</ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
然而,似乎EntityDataSource并没有那么好玩.就好像它不会延迟加载类别数据一样.我有一个非常简单的EDS:
<asp:EntityDataSource ID="dsProducts" runat="server"
ConnectionString="name=NorthwindEntities"
DefaultContainerName="NorthwindEntities" EnableFlattening="False"
EntitySetName="Products">
</asp:EntityDataSource>
Run Code Online (Sandbox Code Playgroud)
但GridView不显示类别名称.如果我为GridView创建一个RowDataBound事件处理程序并将Product实体绑定到该行,我会看到该产品的Category属性返回Nothing.例如,如果我这样做:
Protected Sub gvProducts_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvProducts.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim p As NorthwindModel.Product = e.Row.DataItem
Dim catName = p.Category.CategoryName
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
尝试执行p.Category.CategoryName时出现NullReferenceException.
但是,如果我在Page_Load事件处理程序中编写代码,我知道延迟加载适用于EDMX b/c,如:
Dim context As New NorthwindModel.NorthwindEntities
Dim p = context.Products.Take(1).Single()
Run Code Online (Sandbox Code Playgroud)
我可以通过p.Category.CategoryName获取类别名称而不会出错.
我是否需要做一些伏都教来让EntityDataSource包含对检索相关实体的支持?
谢谢
解决方案: 我指定了EntityDataSource的Include属性,注意要包含的实体对象.具体来说,我将我的EntityDataSource控件的声明性标记更新为:
<asp:EntityDataSource ID="dsProducts" runat="server"
ConnectionString="name=NorthwindEntities"
DefaultContainerName="NorthwindEntities" EnableFlattening="False"
EntitySetName="Products" Include="Category,Supplier">
</asp:EntityDataSource>
Run Code Online (Sandbox Code Playgroud) 我在asp .net格式中使用EntityDataSource,Gridview绑定到它.在entityDataSource中使用where子句:
Where="it.Name like '%@Name%'
Run Code Online (Sandbox Code Playgroud)
@Name 是一个参数:
<WhereParameters>
<asp:ControlParameter ControlID="TextBox1" Name="Name" PropertyName="Text" Type="String" />
</WhereParameters>
Run Code Online (Sandbox Code Playgroud)
但它不起作用.当我@Name用固定字符串更改它正常工作,如下所示:
Where="it.Name like '%ppp%'"
Run Code Online (Sandbox Code Playgroud) 我一直收到这个错误,我认为这是一个Bug但我想你的意见.
除非指定AutoGenerateWhere == true或Where,否则无法指定WhereParameters.
这是我的entitydatasource控件.
<asp:EntityDataSource ID="MtrlEntityDataSource" runat="server"
ConnectionString="name=AitisiEntities" DefaultContainerName="AitisiEntities"
EnableDelete="True" EnableFlattening="False" EnableInsert="True" Select="" AutoGenerateWhereClause="false"
EnableUpdate="True" EntitySetName="MTRL" Where="it.SODTYPE = @sodTypeParam">
<WhereParameters>
<asp:Parameter DbType="Int32" DefaultValue="51" Name="@sodTypeParam" />
</WhereParameters>
</asp:EntityDataSource>
Run Code Online (Sandbox Code Playgroud)
你觉得这里有什么不对吗?在一些项目中尝试并始终保持失败.
谢谢.
当我想配置我的数据源(EntityDataSource1)并分配由实体数据模型自动生成的connectionString时.我收到错误:
"无法加载连接字符串中指定的元数据.请考虑重建Web项目以构建可能包含元数据的程序集.发生以下错误:提供程序未返回ProviderManifest实例".
我读了很多像http://blogs.teamb.com/craigstuntz/2010/08/13/38628/这样的建议. 他们都建议用连接字符串中的assembly-name替换*.例如 :
<connectionStrings>
<add name="MyEntities" connectionString="metadata=
res://*/Model.csdl|
res://*/Model.ssdl|
res://*/Model.msl;provider= <!-- ... -->
Run Code Online (Sandbox Code Playgroud)
用...来代替
<connectionStrings>
<add name="MyEntities" connectionString="metadata=
res://Simple Mvc.Data.dll/Model.csdl|
res://Simple Mvc.Data.dll/Model.ssdl|
res://Simple Mvc.Data.dll/Model.msl;provider= <!-- ... -->
Run Code Online (Sandbox Code Playgroud)
我的问题是.我在哪里可以找到组装名称?我也安装了.Net Reflector,但我找不到实体数据模型的正确程序集名称.
c# entity-framework connection-string entitydatasource entity-framework-6
我有一个启用分页的FormView.FormView绑定到EntityDataSource ...
<asp:EntityDataSource ID="MyEntityDataSource" runat="server"
ConnectionString="name=MyEntitiesContext"
DefaultContainerName="MyEntitiesContext"
EntitySetName="Order"
// ... more stuff to define a query
</asp:EntityDataSource>
Run Code Online (Sandbox Code Playgroud)
... Order从数据库返回类型对象的列表(IEnumerable).让我们说,我的寻呼机位于第2页,因此FormView显示列表的第二个对象.
FormView似乎"知道"它必须显示的对象,因为控件就像
<asp:Label ID="MyLabel" runat="server" Text='<%# Eval("MyProperty")%>'/>
Run Code Online (Sandbox Code Playgroud)
神奇地显示正确对象的"MyProperty"的值.
如何Order在代码隐藏中访问此对象(整个类型的实体,而不是使用"Eval"的单个属性)?