当我尝试在WPF usercontrol
数据网格中插入或更新数据时,该数据未保存到相应的属性。这是由于(至少让我相信)我的具有[NotMapped]
属性的绑定属性引起的,其他所有没有注释的属性都正常工作。
需要更新的数据位于DataGrid
组件内部,该组件与具有适当模型的ObservableCollection
绑定。在模型内部,有几个带有[NotMapped]
批注的属性,尽管我确实需要它们来绑定输入,所以在我的数据库中表(模型)的创建中应该排除这些属性,因此使用{{ 1}}注释。
由于数据已绑定到[NotMapped]
,因此无法将ObservableCollection
属性直接添加到[NotMapped]
(因此它们将不会成为模型的一部分)。
下面是一个示例:
XAML的一部分
在下图中,我们可以看到1个属性(usercontrol
,是pBreedte
属性中的1个,以及NotMapped
的{{1}}:
在ObservableCollection中使用的模型的一部分
有什么方法可以存储/保存datagrid
属性值?
最简单的方法是只在数据库中包含EF6
属性(这样就可以完全删除注释),但是我正尝试避免这种情况。
更多背景信息
添加NotMapped
值是因为它们用作占位符属性。最初,我有几个NotMapped
属性直接绑定到NotMapped
,但是文本框不能很好地处理十进制值(WPF validation rule preventing decimal entry in textbox?)。因此,我为这些十进制属性创建了一个字符串占位符,当保存表单时,十进制属性被设置为其对应的字符串占位符。这样,用户可以添加小数位数而不必使用decimal
,datagrid
或其他任何东西。
答案 0 :(得分:2)
如果您不需要数据库中的信息,则不要将其存储-这意味着您的方法很好。
我在这里认为可能是因为您正在使用实体/数据库模型作为UI模型。
我建议您尝试为UI控件和用户输入引入其他模型。这些模型在开始时似乎是重复的,但是当您在处理应用程序时,它们将开始有所不同,但仍然以不同的观点描述相同的项目。
示例:
实体模型具有CarEntity类。这是一个纯POCO类,仅具有所需的属性,这些属性将包含对应表中的数据。
Ui模型具有CarUi类。它具有与CarEntity相同的属性。它们从显示的数据库(从CarEntity)加载并映射到用户。如果用户更改了某些内容,则diff值将从CarUi映射到CarEntity,然后存储到DB。
使用这种模型分离方法,您不会遇到一个约束(标记列不存储在表中)影响其他功能的问题。
希望这会有所帮助, 欢呼和快乐编码