2013-04-03 59 views
0

我试图比较两个相同类型的对象,以查看是否更改了所做的更改。 让我解释一下过程:实体框架生成的类:相同类型的两个对象在更改后总是相同

表单在页面加载时被填充。当表单填写,我将它保存在一个会话变量原始数据:

newForm = FormRegistry.GetData(userID); 
Session["oldForm"] = newForm; 

当表单一些更改后保存,我再比较两个对象,它们都是一样的。 存储在Session [“oldForm”]中的数据与具有更改的newForm对象相同。

我正在使用实体框架并首先使用数据库生成对象。这只发生在具有1-N关系的对象上。这个过程与没有任何关系的对象完美协作。

谁能告诉我发生了什么事以及如何解决此问题?

+0

这些神秘的物体究竟是什么?说真的,可以用更多的数据来分析这一个。根据对象和应用什么逻辑来比较它们,可能有许多原因。 – Mark 2013-04-04 10:31:53

+0

嗨马克,这里是由EF生成的类和一些更详细的例子,我正在做什么(或试图做):http://pastebin.com/75j5xjU7 这只发生在用类创建的对象上有1-n的关系。 – Ricky 2013-04-04 20:01:27

回答

0

好吧,我认为我对更多事情有所了解 - 但可能是错误的。我最初虽然在每次创建新对象的请求之间保存数据,并对其进行某种比较。

从你听起来像是在保存相同的请求之前和之后比较表单数据。无论哪种方式,这听起来像因为你实际上存储对象的引用,你有效地比较同一个对象与自己。

我认为你需要看看获取克隆的对象进行比较。如果可以的话,序列化可能是创建对象副本的一种简单方法。

这条帖子可能对您有帮助:Deep Copy of a C# Object

0

几个快速的想法 - 首先我发现比较复杂的对象与==运算符不太好,应该使用object1.Equals(object2) - 然后你需要实现(即覆盖)Equals()方法,基本上迭代通过属性和比较每个。

此外,空值阻碍。你需要明确地检查这个案例。这个参考是有用的MSDN: Guidelines for Overloading Equals()

希望这会有所帮助。

+0

我有一个方法来比较两个对象,它的工作很好(我使用反射) – Ricky 2013-04-04 19:40:45

相关问题