【问题标题】:Input Validation in Silverlight 4 to EF EntitySilverlight 4 中对 EF 实体的输入验证
【发布时间】:2011-04-14 09:30:33
【问题描述】:

我有一个 Silverlight 应用程序,它通过 DataBinding 从 WCF 服务加载实体。

所以我有几个视图,其中包含许多文本框,其文本框内容绑定到实体属性。

我想使用 Silverlight 验证并且我不想使用异常方式(我有一些具有很多属性的实体......而且我不想每次在表单中使用它时都重复它...)。

所以我正在尝试使用 IDataErrorInfo 方式,但我不知道该怎么做。

我认为我应该声明一个与服务 EF 模型具有等效类但实现 IDataErrorInfo 的客户端模型。此解决方案意味着复制模型代码并以任何方式从服务模型转换为客户端模型。

另一种解决方案可能是更改 EF 模型本身,但我不知道这对于 MVVM 是否正确(这真的很接近视图,不是吗)。

也许还有另一个我不知道的神奇解决方案。

有什么建议吗??

【问题讨论】:

    标签: silverlight wcf entity-framework validation mvvm


    【解决方案1】:

    推荐的接口其实是INotifyDataErrorInfo

    这为您提供了更多控制权并支持多个错误。在您想要手动控制验证何时发生的情况下,它也更容易使用。

    基本上,有了这个,您可以在“客户端”对象上创建一个验证方法,该方法会检查它们的属性,验证每个属性,并建立一个错误列表。 (HasErrors 变为真,您通知ErrorsChanged,然后绑定到您的对象的代码执行GetErrors

    通过这种方式,您可以构建一个验证引擎并让每个 EF 对象轮询您的数据库以获取验证规则。

    还有这个:http://msdn.microsoft.com/en-us/magazine/ee335695.aspx 如果您可以选择在客户端注释您的 EF 类而不是简单地使用生成的类,您可以在这里找到一个简单的解决方案。

    【讨论】:

    • 感谢您的回答。所以我将不得不使用“客户端”对象并复制 EF 返回的数据......然后我会这样尝试;-)
    【解决方案2】:

    我知道这有点离题,因为您使用的是 WCF 但是如果你要使用 RIA 服务,那么它会从你的 EF 生成对象,你可以简单地在 RIA 中为它们添加一些属性(它带有 cmets 告诉你要使用哪些属性) 而且非常非常简单。

    但该建议仅在您使用 RIA 时才有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多