2010-04-14 8 views
0

asp.net을 사용하고 있습니다. 3.5클래스의 변경된 속성 찾기

10 개의 등록 정보를 포함하고 있고 직렬화 가능으로 표시되지 않은 라이센스 클래스가 있습니다. 데이터베이스에 속성 변경 내용을 기록해야합니다. 라이센스는 엔티티 클래스이며이를 수정할 수있는 권한이 없습니다. 그래서 serializabel로 표시 할 수 없으며 IpropertyChanged Interface를 사용할 수 없습니다.

이제 직렬화 할 수 없으므로 viewstate에 저장할 수 없습니다. 나는 그것을 저장하여 새로운 값과 비교할 수 있고 어떤 값이 변했는지 확인할 수 있도록했습니다.

진행 방법.

+0

LINQ2SQL을 사용하고 있습니까? 그렇다면, 그것을 다루는 몇 가지 방법이 있습니다. – leppie

+0

아니요. LINQ2SQL을 사용하고 있지 않습니다. 우리는 엔터프라이즈 라이브러리를 사용하고 있으며 DAL에서 엔티티를 채우고 있습니다. – Rohit

답변

2

대상 개체를보고 리플렉션을 사용하여 노출 된 모든 속성 값을 이름/값 사전에 저장하는 클래스를 작성하면이 작업을 수행 할 수 있습니다. 그런 다음 "비교"시간에 반사를 다시 사용하여 사전에 저장된 값과 비교합니까?

그냥 추측하면 ...

0

원본 개체가있는 경우 (예 : 변경되기 전). 그런 다음 반사를 사용하여 노출 된 속성을 반복하고 비교할 수 있습니다.

아마 이런 식으로 뭔가를 찾고 끝날 것입니다 귀하의 코드 (이것은 전체 샘플 수 없음) :

Type type = license.GetType(); 
PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); 
foreach(PropertyInfo property in properties) 
{ 
//compare your properties with property.GetValue(newLicense, null) and property.GetValue(originalLicense, null); 
} 

는 그런 다음 저장하거나 다른 열이 원하는대로 할 수 있습니다.

0

주어진 답변에 대한 대안으로 Aspect Oriented Programming (예 : PostSharp : http://www.sharpcrafters.com/)을 살펴볼 수 있습니다.

이렇게하면 속성이 설정 될 때마다 호출되는 클래스 외부의 메서드를 만들 수 있습니다. diff 후에 데이터베이스에 변경 사항을 삽입 할 수 있습니다.

관련 문제