FormView mit EntityDataSource-und DropDownList gibt "Einen Namen für die Eigenschaft '{0}' wurde nicht gefunden auf die Person ..."

Das problem: wenn ich versuche ein update zu tun, mit einem EntityDataSource und ein FormView hat eine <asp:DropDownList> Verknüpfung zu einer anderen Tabelle, die Seite lädt einwandfrei mit der richtigen Einstellung, aber auf update bekomme ich diese Fehlermeldung:

Eine Eigenschaft mit dem Namen 'Lieferanten.VendorId' wurde nicht gefunden auf die Entität während einer insert -, update-oder delete-operation. Überprüfen Sie, um sicherzustellen, dass die spezifizierten Eigenschaften als verbindlich Ausdrücke sind verfügbar, um die Datenquelle.

Die Umwelt und code: mit Visual Studio 2010, Entity Framework 4, ASP.NET web forms, und SQL Server 2008 Express.

Ich habe zwei Tabellen; eine Part Tisch und ein Vendor Tabelle. Die Part Tisch hat eine VendorId Spalte die links zu den Vendor Tisch, und es wird erlaubt sein NULL. Es ist umhüllt von Entity Framework.

Der Teil, der funktioniert: hier ist die 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>

(Hinweis: ich habe versucht, mit EnableFlattening an-und ausschalten.)

In diesem Zusammenhang von einem FormView:

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

Hinweis, dass ich mich zwingen, die FormView in Edit - Modus oder Insert - Modus abhängig von query-string-Parameter.

Ohne die DropDownList ich bin in der Lage, erstellen und aktualisieren von Datensätzen in die Datenbank.

Der Teil, der nicht funktioniert: jetzt für die DropDownList. Zunächst gibt es eine neue EntityDataSource:

<asp:EntityDataSource ID="VendorEntityDataSource" runat="server"
    ConnectionString="name=PartDBEntities"
    DefaultContainerName="PartDBEntities" EnableFlattening="False"
    EntitySetName="Vendors" />

Und dann die DropDownList im EditTemplate mit Umwandlung von Null in der Vorlage Felder:

<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>

Wie ich oben sagte, die erste Seite zeigt nur Prima, die DropDownList hat das Recht, Einträge in und es der richtige Hersteller ist auf den korrekten Wert gesetzt. Ein Klick auf den Update - Taste bewirkt, dass die oben genannten Fehler.

Hier ist der relevante Teil der stack-trace:

[InvalidOperationException: Eine Eigenschaft mit dem Namen 'Lieferanten.VendorId' wurde nicht gefunden auf die Entität während einer insert -, update-oder delete-operation.

Überprüfen Sie, um sicherzustellen, dass die spezifizierten Eigenschaften als verbindlich Ausdrücke sind
zur Verfügung der Datenquelle.]

System.Web.UI.WebControls.EntityDataSourceView.ConvertProperties(IDictionary
Werte, PropertyDescriptorCollection propertyDescriptors,
ParameterCollection referenceParameters, Dictionary`2 convertedValues)
+263

System.Web.UI.WebControls.EntityDataSourceView.ExecuteUpdate(IDictionary
Schlüssel, IDictionary Werte, IDictionary oldValues) +256

System.Web.UI.DataSourceView.Update(IDictionary-Tasten, IDictionary Werte, IDictionary oldValues, DataSourceViewOperationCallback callback) +95

Ich hoffe das ist genug information!

  • Ich denke, ich mache mehr oder weniger das, was dieser Kerl tut: msdn.microsoft.com/en-us/data/cc546554.aspx (Von 5:00 bis 9:20), außer mit einer FormView statt einer GridView. Nicht sicher, was den Unterschied macht.
InformationsquelleAutor Pixel | 2010-08-23
Schreibe einen Kommentar