【问题标题】:C# Entity Framework Class Organization + Data disposedC#实体框架类组织+数据处理
【发布时间】:2016-10-27 15:58:30
【问题描述】:

我正在使用 C# Wpf 和实体框架为朋友的业务做一个小项目,但我遇到了一些问题。

这是我到目前为止所做的:

我将稍微解释一下图表。 该程序由客户、用户、股票等中的选项卡分隔。每个部分都是子分隔的,例如在查看客户端、添加客户端等中分隔客户端。 每个分隔都使用不同的 Xaml 控件 进行,并且该控件的上下文在父 xaml 中设置为存在 父 UI 类的属性对象。

因此,在该主 xaml 窗口中有一个 Main Xaml 窗口,其上下文设置为 General UI Class,有一个 Clients Xaml 控件> 上下文设置为 Client General UI Class

等等,在客户端 xaml 中有一个 View Clients Xaml 控件,其上下文设置为 View Clients UI Class 和一个 Add client Xaml 控件 上下文设置为 添加客户端 UI 类

View Clients UI Class 中是 Client Wrapper Class 的一个元素,它是当前选定的要显示的客户端,客户端属性绑定到表单控件。还有一个 Client Wrapper Class 列表,用于显示和搜索所有现有客户端。

添加客户端 UI 类

的概念相同

Base Db Client ClassEntity Framework生成的类,用于管理数据库中的实体。此类使用 Client Wrapper Class 进行包装,用于数据管理(某些属性返回复杂数据),但对于 WPF 绑定 更为重要,因为 Client Wrapper Class > 实现 PropertyChangedEventHandler

现在我们已经了解了结构的基础知识,让我们来谈谈问题。

  • Client Wrapper Class 有一个 Base Db Client Class 元素,我不知道如何检索该元素的数据,如果复制它或只是返回Base Db Client Class

  • 的属性
  • 当我检索 Client Wrapper Class 列表以存储在 View Clients UI Class 关系属性中的客户(如 创建者)或 status 已释放,当尝试在表单中显示这些属性时,绑定会引发错误。

很抱歉没有更明确和图表质量差。

希望你能指出正确的方向

谢谢大家!!

【问题讨论】:

    标签: c# wpf entity-framework xaml


    【解决方案1】:

    我建议在处理 WPF 和 EF 时使用一些设计模式。你应该知道的主要模式是MVVM。也许您可以为此目的使用现成的Framework

    UI 逻辑在 ViewModel 中实现,但您可以决定如何处理数据(模型)。

    1. 您可以在 ViewModel 中引用您的数据,并在必要时使用 Commands 加载、修改和保存数据。如果您的 ViewModel 属性遵循与您的模型相同的结构,您可以使用 AutoMapper 进行映射。

    2. 或者您可以使用T4 Template 从 EF 模型生成可观察的代理类。如果您的应用程序不太复杂并且您从不从 EF 上下文中分离实体,则此选项是可行的。然后,您可以将模型发布为单个属性,并通过视图中的属性绑定数据。只有完成 UI 逻辑的属性才会包含在 ViewModel 中。

    3. 您可以为您的实体实现或生成中间模型类并来回映射它们。当您应该序列化数据并将数据从客户端发送到客户端时,可以使用此方法。此方法还使您有机会分离特定于数据或视图的 UI 行为。

    我建议您为数据的只读视图(例如列表)实现不同的类,并在检索大量行时在 Linq 查询中使用它们。

    为了处理导航属性和集合,您有多种选择:

    1. 您可以关闭 EF 上的延迟加载并使用 Explicit loading 加载对象图的请求部分

    2. 您可以使用延迟加载,但不应将实体与 EF 上下文分离。

    当您更新实体时:

    1. 您可以使用GraphDiff。它不再维护,但当前版本可以针对 EF6 构建,并且适用于大多数情况。这种方法使用分离的实体。

    2. 或者您可以使用分离的实体并尝试将它们直接附加到 EF 并进行更新。这个是有风险的,因为您在保存逻辑中没有太多控制要创建或删除的内容。

    3. 另一个选项是检查保存逻辑中的每个导航属性和集合,并将适当的更改映射回实体级别或在更新实体之前附加/插入每个嵌套数据。这个拥有最多的控制权,但也需要更多的工作。

    希望能帮到你

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2017-05-23
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多