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

时间:2019-03-25 13:47:43

标签: c# wpf entity-framework-6

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

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

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

下面是一个示例:

XAML的一部分 在下图中,我们可以看到1个属性(usercontrol,是pBreedte属性中的1个,以及NotMapped的{​​{1}}: enter image description here

后面的UserControl代码(部分代码) enter image description here

在ObservableCollection中使用的模型的一部分

该模型用于itemsource(首先编码)。 enter image description here

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

更多背景信息

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

1 个答案:

答案 0 :(得分:2)

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

我在这里认为可能是因为您正在使用实体/数据库模型作为UI模型。

我建议您尝试为UI控件和用户输入引入其他模型。这些模型在开始时似乎是重复的,但是当您在处理应用程序时,它们将开始有所不同,但仍然以不同的观点描述相同的项目。

示例:

实体模型具有CarEntity类。这是一个纯POCO类,仅具有所需的属性,这些属性将包含对应表中的数据。

Ui模型具有CarUi类。它具有与CarEntity相同的属性。它们从显示的数据库(从CarEntity)加载并映射到用户。如果用户更改了某些内容,则diff值将从CarUi映射到CarEntity,然后存储到DB。

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

希望这会有所帮助, 欢呼和快乐编码