2016-06-03 9 views
1

Mit ef6 erstellt ein Master-Detail Winforms mit Bindingnavigator und Bindingsource.Winform-Master-Details mit Entity Framework-Update funktionieren nicht funktionierend

Ich bin in der Lage zu erhalten und zu aktualisieren oder hinzufügen untergeordneten Zeilen zu den vorhandenen, aber wenn ich neue Master-und Kind-Datensätze vom Bildschirm es aktualisiert nur Master. Kinderakten verschwinden. Es ist auch aufgefallen, dass Kind-Einträge verschwinden, wenn ich irgendwelche Master-Details ändere.

Wenn ich gehe und eine untergeordnete Zeile aus Back-End hinzufügen, dann bin ich in der Lage zu bearbeiten und neue untergeordnete Zeilen vom Bildschirm hinzufügen.

Ich denke, das Problem könnte auf einen fehlenden Fremdschlüssel für neue Datensätze zurückzuführen sein. Übergibt Entity Framework den Hauptschlüssel an Details als Fremdschlüssel oder müssen irgendwelche Werte festgelegt werden?

-Code zum Laden von Daten und Datenbindung:

// 
_context.Purchases.Include("PurchaseItems").Load(); 
purchaseBindingSource.DataSource = _context.Purchases.Local.ToBindingList(); 

// 
purchaseItemsBindingSource.DataMember = "PurchaseItems"; 
purchaseItemsBindingSource.DataSource = this.purchaseBindingSource; 

Modelle:

// 
public class Purchase 
{ 
    public Purchase() 
    { 

    } 

    public int ID { get; set; } 
    public string PurchaseBillNo { get; set; } 
    public DateTime PurchaseDate { get; set; } 
    public decimal OtherExpenses { get; set; } 
    public decimal TotalBillAmount { get; set; } 
    public ObservableListSource<PurchaseItem> PurchaseItems { get; set; } 
} 

public class PurchaseItem 
{ 
    public PurchaseItem() 
    { 

    } 

    public int ID { get; set; } 
    [Required] 
    public virtual Purchase Purchase { get; set; } 
    [Required] 
    public virtual Product Product { get; set; } 
    public decimal PurchasePrice { get; set; } 
    public decimal Quantity { get; set; } 
    public decimal Amount { get; set; } 
} 
+0

Es hängt von den Einstellungen für Code und Datenbindungen ab. Sie sollten Modellcodes posten und angeben, wie Sie Daten laden und wie Sie Datagrid-Ansichten und Bindungsquellen binden. –

+0

mit Codedaten aktualisiert – user3658516

+0

Fügen Sie den Code 'Purchase' hinzu. –

Antwort

1

In Ihrem Purchase Modell, sollten Sie PurchaseItems Eigenschaft in Konstruktor initialisieren, indem new ObservableListSource<PurchaseItem>() zuweisen:

public class Purchase 
{ 
    public Purchase() 
    { 
     PurchaseItems = new ObservableListSource<PurchaseItem>(); 
    } 

    public int ID { get; set; } 
    public string PurchaseBillNo { get; set; } 
    public DateTime PurchaseDate { get; set; } 
    public decimal OtherExpenses { get; set; } 
    public decimal TotalBillAmount { get; set; } 
    public ObservableListSource<PurchaseItem> PurchaseItems { get; set; } 
} 
Verwandte Themen