0

我想了解其他人如何应对以下情况。

这不是家庭作业或任何形式的任务。创建示例类是为了更好地说明我的问题,但它确实反映了我们希望得到反馈的现实生活场景。

我们从数据库中检索所有数据并将其放入一个对象中。一个对象代表一条记录,如果数据库中存在多条记录,我们将数据放入记录对象的 List<> 中。

假设我们有以下课程;

    public class Employee
    {
        public bool _Modified;
        public string _FirstName;
        public string _LastName;
        public List<Emplyee_Address> _Address;
    }

    public class Employee_Address
    {
        public bool _Modified;
        public string _Address;
        public string _City;
        public string _State;
    }

请注意,为清楚起见,类中省略了 Getter 和 Setter。在任何代码警察指责我没有使用它们之前,请注意仅在此示例中省略了。

该数据库有一个员工表和另一个员工地址表。

从概念上讲,我们所做的是创建一个 List 对象来表示数据库表中的数据。我们对该对象进行深度克隆,然后将其绑定到前端的控件。然后我们有两个对象(Orig 和 Final)代表数据库中的数据。

然后用户通过创建、修改、删除记录对“最终”对象进行更改。然后我们希望将这些更改持久化到数据库中。

显然我们希望尽可能优雅,只编辑、创建、删除那些需要它的记录。

我们最终想要比较两个 List 对象,以便我们可以;

  1. 查看哪些属性已更改,以便可以将更改持久保存到数据库中。

  2. 查看第二个 List<> 中不再存在哪些属性(记录),以便可以从数据库中删除这些记录。

  3. 查看新 List<> 中存在哪些新属性,以便我们可以在数据库中创建这些属性。

谁想了解我们如何才能最好地实现这一目标。请记住,我们还需要深入到 Employee_Address 列表以检查是否有任何更改,而不仅仅是顶级属性。

我希望我已经说清楚了,并期待任何建议。

4

4 回答 4

1

将可为空的 ObjectID 字段添加到图层的基本类型。将其传递给前端并返回以查看特定实例是否保留在数据库中。即使您没有任何类型的身份映射,它也有许多其他用途

于 2009-04-02T09:01:12.223 回答
0

Data我会在他们的类中做与 .NET 完全相同的事情,即将记录状态(System.Data.DataRowState想到)和所有相关版本一起保存在一个对象中。

这边走:

  • 您可以一目了然地判断它是否已被修改、插入、删除或仍然是原始记录。
  • 您可以通过查询新旧版本来快速找到更改的内容,而无需在另一个集合中挖掘旧版本。
于 2009-04-02T08:33:37.657 回答
0

为什么要比较两个列表对象?您可能会使用大量内存来存储本质上是重复的数据。

我建议为每个对象设置一个状态属性,该属性可以告诉您该特定对象是新建、已删除还是已更改。如果您想进一步将属性设置为枚举,则可以将其设置为包含某种字典的对象,该字典包含要更新的更改,尽管这很可能仅适用于已更改状态的情况。

添加此类属性后,应该很容易浏览列表、添加新对象、删除已删除对象等。

您可能还想检查实体框架是如何做这种事情的。

于 2009-04-02T08:36:24.547 回答
0

您应该研究身份映射模式的使用。与Unit of Work相结合,这允许您维护各种对象“缓存”,您可以从中检查哪些对象需要保存到数据库中,并在读取时从身份映射返回对象,而不是创建新对象并返回那些.

于 2009-04-02T08:45:04.353 回答