【问题标题】:Winform master details with Entity Framework update working create not workingWinform master details with Entity Framework update working create not working
【发布时间】:2016-06-03 19:24:17
【问题描述】:

在 ef6 中,使用 bindingnavigator 和 bindingsource 创建了一个 master detail Winforms。

我能够检索和更新或将子行添加到现有行,但是当我从屏幕添加新的主记录和子记录时,它只会更新主记录。子记录消失。还注意到,当我更改任何主详细信息时,子记录会消失。

如果我从后端添加一个子行,那么我可以从屏幕编辑和添加新的子行。

我认为问题可能是由于缺少新记录的外键,Entity Framework 会将主键作为外键移交给详细信息,还是需要设置任何值?

加载数据和数据绑定的代码:

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

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

型号:

//
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; }
}

【问题讨论】:

  • 这取决于代码和数据绑定设置。您应该发布模型代码以及如何加载数据以及如何绑定 datagridviews 和 bindingsources。
  • 已更新代码详情
  • 也添加Purchase的代码。
  • Purchase 和 PurchaseItems 模型更新

标签: c# winforms entity-framework


【解决方案1】:

在您的Purchase 模型中,您应该通过分配new ObservableListSource&lt;PurchaseItem&gt;() 在构造函数中初始化PurchaseItems 属性:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2022-12-28
    • 1970-01-01
    • 2022-11-20
    • 2016-03-19
    • 2019-12-27
    • 2022-12-01
    相关资源
    最近更新 更多