问题:当我尝试使用EntityDataSource
和FormView
链接到另一个表的<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
我希望这是足够的信息!
答案 0 :(得分:4)
但是,选择值不应该来自PartEntityDataSource透视图,因为VendorEntityDataSource不绑定整个数据绑定控件,您需要使用<%# Bind("VendorID") %>
。
HTH。