2010-12-09 13 views
3

Ich versuche, einen effektiven Weg zu finden, berechnete Felder eines Entity Framework-Modell in WinForms Databind. Ich verwende Visual Studio 2008 und .NET Framework 3.5. Ein Beispiel wäre für EntityX, sagen wir, dass ich columnA und columnB habe, und ich möchte eine berechnete Eigenschaft namens sumAB. Die Art und Weise habe ich das getan, hat mit Teilklassen gewesen:Datenbindung von Computed Eigenschaften in Entity Framework

public partial class EntityX 
{ 
    public int sumAB 
    { 
     get 
     { 
      return this.columnA + this.columnB; 
     } 
    } 
} 

ich dann Visual Studio bin mit EntityX als Datenquelle hinzufügen, so kann ich den automatischen Drag & Drop-Datenbindung. Das Problem, das ich habe, ist, dass die berechneten Eigenschaften nicht in den Datenquellenfeldern angezeigt werden. Ich suche nach einer Möglichkeit, die automatische Datenbindung von berechneten Feldern zu haben.

Ich weiß, dass ich dies manuell tun könnte, aber dann würde ich auch müssen manuell alle Bindungs ​​Code schreiben, um das Feld zu aktualisieren, wenn columnA oder columnB geändert werden. Ich habe auch keinen Zugang, um dieses Feld auf der SQL-Server-Seite zu berechnen.

Kennt jemand irgendwelche Möglichkeiten, um persue diese oder andere ähnliche Richtungen zu erreichen?

Danke!

UPDATE

Getestet habe ich diese auf einer anderen Maschine, bin Visual Studio 2010 und .NET 4, und ich immer noch mit dem gleichen Verhalten zu empfangen. Interessanterweise kann ich manuell eine Textbox erstellen und eine Datenbindung hinzufügen und es wird gut funktionieren, wie unten:

sumABTextBox.DataBindings.Add(
    new System.Windows.Forms.Binding("Text", EntityXBindingSource, "sumAB", true)); 

Es funktionierte auch wenn ich die Eigenschaft in der .edmx Datei platziert, aber dies ist nicht wünschenswert, da Es wird jedes Mal gelöscht, wenn die Datenbank aktualisiert wird.

Irgendwelche anderen Ideen?

UPDATE 2

Immer noch keine Lösung ... hatte ich Alternativen in meinem Code zu verwenden, um Termine einzuhalten. Ich bin immer noch sehr daran interessiert, diese, wenn jemand findet eine Antwort ...

+0

Ich kann keinen Grund sehen, warum das, was Sie tun, nicht funktionieren würde. Es ist nur eine Eigenschaft, also wie der Code, der die Datenquelle erzeugt, sie als anders wahrnimmt, ist jenseits meiner. Können Sie in Ihrer Lösung in die XML-Datenquelle bohren und sehen, ob dort die Eigenschaftenbindungen vorhanden sind? –

+0

Ich schaute es mir an. Ich bin nicht mit der Struktur dieser Dateien vertraut, aber ich habe bemerkt, dass es die automatisch generierte Datei aufgelistet hat, aber es ist nicht meine Datei als eine der CSVs in dem Typeinfo-Tag aufgeführt. Ich habe versucht, das Hinzufügen meiner Datei, Speichern, neu zu kompilieren, aber kein Glück ... – bunglestink

Antwort

1

Klingt für mich seltsam. Weil ich denselben Ansatz in meinem Projekt verwende (Entity Framework, Self Tracking Entities, WCF, Winforms).

konstruierte ich ein einfaches WinForms applciation es zu testen und die „berechnete“ Eigenschaft zeigt nur in der databindings.Text Eigenschaft eines Textbox-Steuerelement auf.

habe ich eine einfache Klasse:

public partial class Test 
{ 
    public int A { get; set; } 
    public int B { get; set; } 

    public Test() 
    { 
    } 
} 
public partial class Test 
{ 
    public int AB 
    { 
     get { return A * B; } 
    } 
} 

Added ein Binding zu einem Formular (mit Datenquelle zeigt auf ein Objekt vom Typ Test) und drei auf das Binding binded Textfelder und die Eigenschaften: A, B und AB . Im Konstruktor des Formulars erstellte ich eine Instanz von test, befüllte Werte für A und B, setze bindingsource.DataSource auf die erzeugte Instanz und dachte groovy auf dem Formular;)

Dieser einfache Testfall würde nicht anders sein Ihre Situation, außer dass Sie mit Entitäten arbeiten, die nicht nur Objekte sind. Ich kann das Problem wirklich nicht anhand Ihrer Beschreibung sehen ... Alle weiteren Kommentare könnten mir helfen weiter zu helfen ...

+0

Sind die Teilklassen EntityX in derselben Baugruppe? Sonst würden sie in zwei separaten "vollen Klassen" kompiliert werden ... –

+0

Ich habe gerade mit Ihrer Probe getestet, und es hat gut funktioniert. Soweit ich weiß, befinden sie sich in derselben Assembly und demselben Namespace. Die Entität, die ich verwende, wird automatisch aus der vorhandenen Datenbank generiert. Daher bin ich mir nicht sicher, ob sich dies auf irgendetwas auswirkt. Ich habe keine Probleme beim Zugriff auf diese Eigenschaften aus dem Code, aber der Data Source Mapper ignoriert sie aus irgendeinem Grund. – bunglestink

+0

Verbinden Sie sich direkt aus einer WinForms-Anwendung mit dem EF? Oder stellen Sie Dienste (WCF) aus und transportieren die Entitäten? Im letzten Fall, wenn Sie die Assembly, die die Entitäten enthält, nicht teilen, aber die Entitäten clientseitig durch Proxygenerierung "kennen", kann es sein, dass Ihre berechnete Eigenschaft nicht mit dem Attribut [DataMember] versehen ist winforms/clientside wird diese Eigenschaft nicht kennen. –

1

Ich habe im Grunde nur die gleiche Frage (WPF nicht WinForms) gestern - Show Computed Property in Entity Framework and WPF UI.

Kurz gesagt, ich konnte keine automatische Unterstützung finden. Ich musste die Spalten in meiner DataGridView für jede berechnete Eigenschaft erstellen. Dann lassen die Datagridview wissen, dass diese Eigenschaften aktualisiert haben, ich habe OnPropertyChanged („ComputedPropertyName“) in der OnChanged Teil Methode aufzurufen.

z.B.

Wenn es eine automatische Möglichkeit dafür gibt, würde ich auch gerne wissen.

+1

Ja ... das ist im Wesentlichen das, was ich auch gemacht habe ... es macht nicht, dass es keinen automatischen Weg dafür geben würde ... – bunglestink

+0

Glad das hat im Grunde funktioniert, akzeptieren Sie eine Antwort auf diese Frage? – Chad

Verwandte Themen