带有EntityDataSource和DropDownList的FormView给出了“在实体上找不到属性名称'{0}”......“

时间:2010-08-23 09:40:32

标签: asp.net entity-framework-4 webforms

问题:当我尝试使用EntityDataSourceFormView链接到另一个表的<asp:DropDownList>进行更新时,页面加载使用正确的设置很好,但在更新时我收到此错误消息:

  

在插入,更新或删除操作期间,在实体上找不到名为“Vendor.VendorId”的属性。检查以确保指定为绑定表达式的属性可用于数据源。

使用Visual Studio 2010,Entity Framework 4,ASP.NET Web表单和SQL Server 2008 Express的环境和代码

我有两张桌子;一个Part表和一个Vendor表。 Part表有一个VendorId列,链接到Vendor表,并且允许NULL。它由实体框架包装。

有效的部分:这里是EntityDataSource

<asp:EntityDataSource ID="PartEntityDataSource" runat="server" 
    ConnectionString="name=PartDBEntities" 
    DefaultContainerName="PartDBEntities" EnableFlattening="True" 
    EntitySetName="Parts" 
    EntityTypeFilter="Part" Where="it.PartId = @PartId" 
    EnableUpdate="True" EnableInsert="True" Include="Vendor">
    <WhereParameters>
        <asp:QueryStringParameter Type="Int64" DefaultValue="null" Name="PartId" 
            QueryStringField="partid" />
        </WhereParameters>
</asp:EntityDataSource>

(注意:我已尝试开启和关闭EnableFlattening。)

这与FormView

相关联
<asp:FormView ID="PartEditorFormView" runat="server"
    DataSourceID="PartEntityDataSource"
    DataKeyNames="PartId">

请注意,我强制FormView进入Edit模式或Insert模式,具体取决于查询字符串参数。

如果没有DropDownList,我可以在数据库中创建和更新记录。

<{1}}现在不起作用的部分。首先是一个新的DropDownList

EntityDataSource

然后使用Converting Null in Template Fields <asp:EntityDataSource ID="VendorEntityDataSource" runat="server" ConnectionString="name=PartDBEntities" DefaultContainerName="PartDBEntities" EnableFlattening="False" EntitySetName="Vendors" /> DropDownList中的EditTemplate

<asp:DropDownList ID="EditVendorDDL" runat="server" 
    DataSourceID="VendorEntityDataSource" 
    DataTextField='CompanyName' 
    DataValueField='VendorId'
    AppendDataBoundItems="True"
    SelectedValue='<%# Bind("Vendor.VendorId") %>'>
        <asp:ListItem Selected="True" Value="">(none)</asp:ListItem>
</asp:DropDownList>

正如我上面所说,初始页面显示得很好; DropDownList中包含正确的条目,并且正确的供应商设置为正确的值。只需单击Update按钮即可导致上述错误。

以下是堆栈跟踪的相关部分:

  

[InvalidOperationException:在插入,更新或删除操作期间,在实体上找不到名为“Vendor.VendorId”的属性。
  检查以确保指定为绑定表达式的属性   可用于数据源。]
  System.Web.UI.WebControls.EntityDataSourceView.ConvertProperties(IDictionary的   值,PropertyDescriptorCollection属性描述符,   ParameterCollection referenceParameters,Dictionary`2 convertedValues)   +263
  System.Web.UI.WebControls.EntityDataSourceView.ExecuteUpdate(IDictionary的   keys,IDictionary values,IDictionary oldValues)+256
  System.Web.UI.DataSourceView.Update(IDictionary键,IDictionary值,IDictionary oldValues,DataSourceViewOperationCallback回调)+95

我希望这是足够的信息!

1 个答案:

答案 0 :(得分:4)

但是,选择值不应该来自PartEntityDataSource透视图,因为VendorEntityDataSource不绑定整个数据绑定控件,您需要使用<%# Bind("VendorID") %>

HTH。