Ich verliere meinen Verstand. Es ist ein einfaches Szenario:Nicht alle von EntityDataSource geladenen Entity-Eigenschaften, die von FormView verwendet werden
Entity-Definition (erzeugt)
// this class is obviously generated by the designer, this is just an example
public class SomeEntity {
public int SomeEntityID { get; set; } // primary key
public String Property1 { get; set; }
public String Property2 { get; set;
}
.. in aspx Datei
<asp:EntityDataSource
ID="EntityDataSource1" runat="server"
ConnectionString="name=Connection" DefaultContainerName="SomeEntities"
EnableDelete="True" EnableInsert="True" EnableUpdate="True"
EntitySetName="SomeEntity" OnUpdating="UpdatingEntity" AutoGenerateWhereClause="true">
<WhereParameters>
<asp:QueryStringParameter Name="SomeEntityID" QueryStringField="SomeEntityID" Type="Int32"/>
</WhereParameters>
</asp:EntityDataSource>
<asp:FormView runat="server" ID="FormView1" DataSourceID="EntityDataSource1">
<EditItemTemplate>
<asp:TextBox runat="server" ID="textbox1" Text='<%# Bind("Property1")%>'
</EditItemTemplate>
</asp:FormView>
... in Code hinter
// ... as per Diego Vega's unwrapping code
public TEntity GetItemObject<TEntity>(object dataItem)
where TEntity : class
{
var entity = dataItem as TEntity;
if (entity != null)
{
return entity;
}
var td = dataItem as ICustomTypeDescriptor;
if (td != null)
{
return (TEntity)td.GetPropertyOwner(null);
}
return null;
}
protected void UpdatingEntity(object sender, EntityDataSourceChangingEventArgs e) {
SomeEntity entity = GetItemObject<SomeEntity>(e.Entity);
// at this point entity.Property1 has the value of whatever was entered in the
// bound text box, but entity.Property2 is null (even when the field bound to this
// property in the database contains a value
// if I add another textbox to form view and bind Property2 to it ... then I can
// obviously get its value from the entity object above
}
grundsätzlich nur die Eigenschaften In der Formularansicht gebundene Werte sind im Updating-Ereignishandler verfügbar, schlimmer noch, wenn ich versuche Laden Sie die Entity von e.Context nach Schlüssel neu, ich bekomme nur diese Eigenschaften wieder.
Was gibt? Wie kann im Updatereignis auf alle Eigenschaften der Entität zugegriffen werden? Auch wenn die Datenquelle Include enthält, sind diese eingeschlossenen Werte im Aktualisierungsereignis NICHT verfügbar. Was ist los, bitte HILFE!
Ja, ich habe es später selbst herausgefunden. Ich denke es ist scheiße, aber naja. Du solltest das Karma bekommen, damit andere Leute, die nach einer Antwort suchen, es bekommen können. Prost! – Strelok