WPF - EF6 中的 NotMapped 注释未存储/保存 属性 个值

WPF - NotMapped annotation in EF6 not storing / saving property value(s)

当我尝试在我的 WPF usercontrol 数据网格中插入或更新数据时,数据没有保存到相应的 属性。这是由于(至少我相信)我的绑定 属性 具有 [NotMapped] 属性,所有其他没有注释的属性都正常工作。

需要更新的数据位于 DataGrid 组件内,该组件绑定到具有适当模型的 ObservableCollection。在模型内部有几个带有 [NotMapped] 注释的属性,这些属性应该在我的数据库中创建 table (模型)时被排除在外,尽管我确实需要它们来绑定输入,因此使用[NotMapped] 注释。

由于数据绑定到 ObservableCollection,我无法将 [NotMapped] 属性直接添加到 usercontrol(因此它们不会成为模型的一部分)。

下面举例:

部分XAML 在下图中,我们可以看到 1 属性 (pBreedte),这是 NotMapped 属性中的 1 个,以及 datagrid 中的 itemsource

后面的UserControl代码(部分)

在 ObservableCollection 中使用的部分模型

该模型正在用于 EF6(代码优先)。

有什么方法可以存储/保存 NotMapped 属性 值? 最简单的方法是只在数据库中包含 NotMapped 属性(因此完全删除注释),但我试图避免这种情况。

更多背景信息

添加 NotMapped 值是因为它们用作占位符 属性。最初我有几个 decimal 属性直接绑定到 datagrid,但文本框不能很好地处理小数值 (WPF validation rule preventing decimal entry in textbox?)。所以我为这些十进制属性创建了一个字符串占位符,当保存表单时,十进制属性被设置为其对应的字符串占位符。这样用户就可以添加小数位而无需使用 delayvalue converter 或任何东西。

如果您的数据库中不需要该信息,则不要存储它 - 这意味着您的方法很好。

我认为这里可能存在的问题是您将 entity/database 模型用作 UI 模型。

我建议您尝试为 UI 控件和用户输入引入不同的模型。这些模型一开始可能看起来是重复的,但是当您处理您的应用程序时,它们会开始有所不同,但仍然描述相同的项目只是形成不同的视角。

示例:

实体模型有一个 class CarEntity。它是一个纯 POCO class,只有需要的属性将包含相应 table.

中的数据

Ui 模型有一辆 class 汽车 Ui。它具有与 CarEntity 相同的属性。它们是从显示给用户的数据库(来自 CarEntity)加载和映射的。如果用户更改某些内容,差异值将从 CarUi 映射到 CarEntity,然后存储到 DB。

通过这种模型分离方法,您应该不会遇到一个约束(标记列不存储在 table 中)影响其他功能的问题。

希望这对您有所帮助, 干杯,快乐编码!