标签: entitydatasource

将DBContext转换为ObjectContext以与GridView一起使用

我有一个使用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

29
推荐指数
1
解决办法
3万
查看次数

实体DataSource无法使用Entity Framework 6升级

我最近将我们的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之后)

任何人都可以帮忙解决这个问题吗?

entity-framework entitydatasource entity-framework-6

9
推荐指数
1
解决办法
1万
查看次数

如何使用过滤器从EntityDataSource填充可更新的FormView

我正在尝试创建一个用于更新帐户详细信息的成员页面.我想用成员的数据填充表单,但我不知道如何在EntityDataSource上设置过滤器来限制查询.

当我根据成员ID设置select语句时,我收到错误

Select cannot be set if EnableDelete, EnableInsert, or EnableUpdate is enabled.

我认为这是因为你不能更新投影或其他东西,但是在这周围有什么?

或者我是否必须在Page_Load中运行查询并自己填充表单?

c# asp.net formview entity-framework entitydatasource

6
推荐指数
1
解决办法
4535
查看次数

使用EntityDataSource和WHERE过滤数据

嗨,我有一个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)

c# asp.net frame entitydatasource

6
推荐指数
1
解决办法
3万
查看次数

Visual Studio 2013和实体框架

我正在使用VS 2013和SQL Svr 2012并尝试使用EF来填充gridview.由于这是一个非常简单的测试,我只有一个带有密钥和几个数据字段的表.创建模型的过程似乎工作正常 - 它在设计器视图中按预期显示,文件在app_code中创建,bin文件夹用2个dll创建,配置文件用连接字符串和其他条目更新.

当我尝试选择"命名连接"时,我收到错误"无法加载指定的元数据资源",并且它讨论了重建项目以获取程序集.

我花了几个小时阅读这样的其他案例,我无法理解:

  1. 为什么会出现这种情况,因为VS 2010从来都不是问题

  2. 如何修复连接字符串以指向它想要的资源.我完全失去了关于完全合格的装配名称的所有技术建议 - 我尝试的任何工作都没有.

  3. 如何设置一些参数以强制资源在适当的位置?我读过的所有建议似乎都与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的人尝试复制我的问题,因为它只需要几分钟就可以完成:

  1. 在MS SQL Server中,使用一个具有主键和几个数据字段的表创建一个小型DB,并填充一些测试数据 - 使用TestTable1将其命名为TinyDB.

  2. 使用VS 2013 Express for Web,使用VB创建一个"新网站",其中包含"ASP Empty Web Site"选项.

  3. 添加包含"ADO.Net实体数据模型"的ASP App_Code文件夹,并将名称保留为"模型".

  4. 从数据库生成模型并为"TinyDB"创建"新连接"并使用Entity Framework 6.0然后选择"TestTable1".注意命名空间是"TinyDBModel".单击"完成"将在App_Code,其他文件夹中生成多个项目,并更新web.config.

  5. 添加名为default.aspx的Web表单并将gridview拖到其上.在网格视图的设计模式中,选择"新数据源",然后选择"实体"选项(注意出现在default.aspx中的EntityDataSource1的名称).单击下一步,在"命名连接"下选择"TinyDBEntities" - 这是我的错误"无法加载指定的元数据资源".

请注意,VS 2010中的这个精确练习可以很好地工作,并生成一个显示正确数据的网格.

entity-framework entitydatasource visual-studio-2013

6
推荐指数
1
解决办法
4万
查看次数

无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.使用EntityDataSource

我有一个问题,只显示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

5
推荐指数
2
解决办法
6万
查看次数

关系从一对多变为多对多需要更新listview

我有一个分发表,其中包含一个分配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

5
推荐指数
1
解决办法
393
查看次数

使用EntityDataSource过滤数据

我使用EF 4,C#和MS会员提供商.

我有一个带有DataSource的GridView和一个EntityDataSource Web控件.

我想使用EntityDataSource过滤数据,过滤器显示申请当前登录用户,此值应使用MS Memebership Provider(Membership.GetUser();).

现在我不能在EntityDataSource中输入任何允许我点的那个参数(在Where /使用提供的参数自动生成Where表达式中).

你有什么想法?

请提供一些代码示例.谢谢你的时间!

c# asp.net entity-framework entitydatasource

4
推荐指数
1
解决办法
8845
查看次数

如何让EntityDataSource允许我访问子实体?

我有一个非常简单的模型,我正在为使用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 entity-framework entitydatasource

3
推荐指数
1
解决办法
5546
查看次数

像entitydatasource中的operator一样

我在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)

asp.net gridview entity-sql entitydatasource sql-like

3
推荐指数
1
解决办法
2834
查看次数

EntityDataSource中的Where和AutoGenerateWhere

我一直收到这个错误,我认为这是一个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)

你觉得这里有什么不对吗?在一些项目中尝试并始终保持失败.

谢谢.

asp.net entitydatasource c#-4.0

2
推荐指数
1
解决办法
1899
查看次数

提供程序未返回ProviderManifest实例

当我想配置我的数据源(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

1
推荐指数
1
解决办法
7756
查看次数

asp:FormView的"当前"对象绑定到EntityDataSource

我有一个启用分页的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"的单个属性)?

asp.net formview entity-framework entitydatasource

0
推荐指数
1
解决办法
2411
查看次数