数据库持久性的c#对象相等性

数据库持久性的c#对象相等性,c#,class,object,persistence,equality,C#,Class,Object,Persistence,Equality,我想了解其他人如何应对以下情况 这不是家庭作业或任何形式的作业。创建示例类是为了更好地说明我的问题,但它确实反映了我们希望得到反馈的真实生活场景 我们从数据库中检索所有数据并将其放入一个对象中。一个对象表示一条记录,如果数据库中存在多条记录,我们将数据放入记录对象的列表中 假设我们有以下课程 public class Employee { public bool _Modified; public string _FirstName;

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

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

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

假设我们有以下课程

    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;
    }
公共类员工
{
修改公共布尔;
公共字符串_FirstName;
公共字符串\u LastName;
公共列表地址;
}
公共类雇员地址
{
修改公共布尔;
公共字符串地址;
公共字符串城市;
公共字符串状态;
}
请注意,为了清晰起见,类中省略了getter和setter。在任何代码警察指控我没有使用它们之前,请注意,本例中只保留了这些代码

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

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

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

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

我们最终想要比较两个列表对象,以便

  • 查看更改了哪些属性,以便将更改持久化到数据库

  • 查看第二个列表中不再存在的属性(记录),以便从数据库中删除这些记录

  • 查看新列表中存在哪些新属性,以便我们可以在数据库中创建这些属性

  • 谁想就我们如何才能最好地实现这一目标展开讨论。请记住,我们还需要深入到Employee_地址列表以检查任何更改,而不仅仅是顶级属性


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

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

    这样:

    • 您可以一眼看出它是否已被修改、插入、删除或仍然是原始记录
    • 通过查询新版本与旧版本,您可以快速找到已更改的内容,而无需挖掘其他集合来查找旧版本

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

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

    添加这样的属性后,应该可以很容易地浏览列表、添加新对象、删除删除的对象等


    您可能还需要检查实体框架是如何完成这类工作的。

    您应该调查该模式的使用情况。与之相结合,这允许您维护一个对象“缓存”,您可以从中检查哪些对象需要保存到数据库,并在读取时从标识图返回对象,而不是创建新对象并返回这些对象。

    将可为空的ObjectID字段添加到图层的基本类型。将其传递到前端和后端,以查看特定实例是否在数据库中持续存在。 即使你没有任何身份地图,它也有许多其他用途