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?)。所以我为这些十进制属性创建了一个字符串占位符,当保存表单时,十进制属性被设置为其对应的字符串占位符。这样用户就可以添加小数位而无需使用 delay
、value converter
或任何东西。
如果您的数据库中不需要该信息,则不要存储它 - 这意味着您的方法很好。
我认为这里可能存在的问题是您将 entity/database 模型用作 UI 模型。
我建议您尝试为 UI 控件和用户输入引入不同的模型。这些模型一开始可能看起来是重复的,但是当您处理您的应用程序时,它们会开始有所不同,但仍然描述相同的项目只是形成不同的视角。
示例:
实体模型有一个 class CarEntity。它是一个纯 POCO class,只有需要的属性将包含相应 table.
中的数据
Ui 模型有一辆 class 汽车 Ui。它具有与 CarEntity 相同的属性。它们是从显示给用户的数据库(来自 CarEntity)加载和映射的。如果用户更改某些内容,差异值将从 CarUi 映射到 CarEntity,然后存储到 DB。
通过这种模型分离方法,您应该不会遇到一个约束(标记列不存储在 table 中)影响其他功能的问题。
希望这对您有所帮助,
干杯,快乐编码!
当我尝试在我的 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?)。所以我为这些十进制属性创建了一个字符串占位符,当保存表单时,十进制属性被设置为其对应的字符串占位符。这样用户就可以添加小数位而无需使用 delay
、value converter
或任何东西。
如果您的数据库中不需要该信息,则不要存储它 - 这意味着您的方法很好。
我认为这里可能存在的问题是您将 entity/database 模型用作 UI 模型。
我建议您尝试为 UI 控件和用户输入引入不同的模型。这些模型一开始可能看起来是重复的,但是当您处理您的应用程序时,它们会开始有所不同,但仍然描述相同的项目只是形成不同的视角。
示例:
实体模型有一个 class CarEntity。它是一个纯 POCO class,只有需要的属性将包含相应 table.
中的数据Ui 模型有一辆 class 汽车 Ui。它具有与 CarEntity 相同的属性。它们是从显示给用户的数据库(来自 CarEntity)加载和映射的。如果用户更改某些内容,差异值将从 CarUi 映射到 CarEntity,然后存储到 DB。
通过这种模型分离方法,您应该不会遇到一个约束(标记列不存储在 table 中)影响其他功能的问题。
希望这对您有所帮助, 干杯,快乐编码!