【问题标题】:Inserting new record using Entity Framework in WPF with MVVM在带有 MVVM 的 WPF 中使用实体框架插入新记录
【发布时间】:2017-11-18 15:06:02
【问题描述】:

我正在尝试创建一个允许用户将记录插入数据库的视图。该项目是根据 MVVM 架构构建的。

在我看来,我正在像这样绑定我的 UI 元素:

<StackPanel Orientation="Horizontal">
      <Label Width="200">Equipment Number</Label>
      <TextBox Width='150'
               Text="{Binding Equipment.EquipmentSerialnumber, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
    </StackPanel>

视图绑定到视图模型,该模型保存当前正在修改的属性:

public Equipment Equipment
{
    get { return _equipment; }
    private set
    {
    _equipment = value;
    OnPropertyChanged();
    }
}

在我看来,我有一个绑定到命令的按钮,它创建了一个新的委托命令。所以在我的视图模型的构造函数中,我设置了按下按钮时执行的方法:

CreateEquipmentCommand = new DelegateCommand(OnCreateEquipmentExecute, OnEquipmentCreateCanExecute);

我正在使用 Prism.Core 来实现这一点。当用户点击按钮时,调用此方法:

private async void OnCreateEquipmentExecute()
{
    var equipment = CreateNewEquipment();
    await _equipmentRepository.SaveAsync(); 
}

然后调用CreateNewEquipment 方法,在创建设备后将设备添加到repo。

var equipment = new Equipment();
_equipmentRepository.Add(equipment);
return equipment;

我的 repo 是有状态的,并保持与数据库的连接。这是添加方法:

public void Add(Equipment equipment)
{
    _context.Equipments.Add(equipment);
}

SaveAsync() 应该保存对 db 上下文所做的所有更改,从而创建一个插入语句。

但是,当我单击按钮时,视图中的值不会出现在我尝试插入的设备中。我不确定为什么会这样。它给了我一个缺少值的验证错误。

【问题讨论】:

    标签: c# sql wpf entity-framework mvvm


    【解决方案1】:

    您创建了新设备,但没有从绑定的视图模型映射值。所以在你的CreateNewEquipment 方法中你应该这样做:

    var equipment = new Equipment(){EquipmentSerialnumber = _equipment.EquipmentSerialnumber};
    _equipmentRepository.Add(equipment);
    return equipment;
    

    【讨论】:

    • 谢谢,我知道为什么它不起作用了。我设法通过调用 CreateNewEquipment 方法并在我的视图模型的构造函数中将其返回值设置为我的类属性来解决它,因此我现在可以跟踪我的更改。
    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    相关资源
    最近更新 更多