【问题标题】:WPF - NotMapped annotation in EF6 not storing / saving property value(s)WPF - EF6 中的 NotMapped 注释不存储/保存属性值
【发布时间】:2019-03-25 13:47:42
【问题描述】:

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

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

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

以下示例:

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

后面的用户控制代码(部分)

在 ObservableCollection 中使用的部分模型

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

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

更多背景信息

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

【问题讨论】:

  • 您能否将 NotMapped 属性删除到它们自己的类中。这样,您将有 1 到 1 个班级供您选择。然后单独处理NotMapped?

标签: c# wpf entity-framework-6


【解决方案1】:

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

我认为这里可能存在的问题是您将实体/数据库模型用作 UI 模型。

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

例子:

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

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

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

希望这会有所帮助, 干杯,编码愉快!

【讨论】:

  • 虽然我之前确实像这样构建了一些其他项目,但我从未想过在这个 WPF 项目中这样做。感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多