2014-12-23 11 views
-1

나는 여러 가지를 읽고 읽고 시도해 왔지만 가장 기본적인 것을 성취 할 수있다.Nullable 속성에 null 할당 C#

여러 개의 null 가능 속성이있는 사용자 지정 개체가 있습니다. 이 속성에 이미 데이터가 있으면 문제가 null로 설정되지 않습니다. 이 게시물의 단순화를 위해 코드가 단순화되었습니다.

이 메서드는 전달 된 데이터를 사용하여 데이터베이스의 레코드를 수정합니다. 따라서 구독 개체를 만드는 라인에서 매개 변수를 사용하여 새 레코드인지 또는 기존 레코드를 수정하는지 알 수 있습니다. 기존 데이터베이스를 수정하려면 데이터베이스에서 레코드를 찾고 데이터베이스의 데이터로 채워진 개체를 반환합니다. 그런 다음 개체 속성을 새 데이터로 덮어 쓰고 다시 저장합니다. FechaAlta 속성에 데이터가있는 기존 레코드를 덮어 쓰고이 날짜를 null로 설정하려면 FechaData 개체 속성이 null로 설정되지 않습니다. 충분히 명확하길 바랍니다.

public string ProcessSubscription(string cRMID, string suscripID, DateTime? fechaAlta = null) 
{ 
    Subscription subscription = null; 
    .... 
    subscription = new Suscription(modify) 
    .... 
    subscription.CRMID = cRMID; 
    subscription.SuscripID = suscripID; 
    subscription.FechaAlta = fechaAlta; 
    .... 
    return _update.UpdateEntity(subscription); 
} 

다음은 디버거가 그 행 다음에 표시하는 것입니다. 테스트 목적으로 null로 설정하려고했습니다. . Image from the debugger

+1

완료되지 않았습니다. 'Subscription.FechaAlta'의 정확한 정의 (타입)는 무엇입니까? 디버거에서 어떤 일이 일어나고 이전/이후의 Db에 어떤 값이 있습니까? –

+1

또한 .net의'null' 값은 매우 다릅니다 데이터베이스에서 'NULL'값으로; 나중에 일반적으로 .net에서'DbNull'으로 처리됩니다. 물론 이것은 DBMS 및 사용하는 통합 유형에 따라 다릅니다. –

+0

@ JoshPart 죄송합니다. Josh, 전체 클래스 정의를 던지지 않고 내가 할 수있는 모든 것을 설명하려고했습니다. FechaAlta에 대한 정의는 물론 개인용 DateTime입니까? _fechaAlta = null. 같은 유형의 Get/Set 속성을 사용합니다. 디버거가 코드 예제의 줄에 도달하면 이전 데이터 (null이 아닌 DB 데이터) 만 남습니다. –

답변

0

귀하의 질문은 다소 부족하다. 그러나 내가 수집 한 것에서 특정 조건이 충족 될 때 함수에서 fechaAlta를 null로 설정하려고합니까? 이 경우 함수는 fechaAlta를 null로 설정하려고 시도조차하지 않습니다. 필자가 볼 수있는 것은 fechaAlta를 '선택적 매개 변수'로 설정했기 때문입니다. 즉, ProcessSubscription()이 호출 될 때 fechaAlta가 지정되지 않으면 null이됩니다. 그러나 ProcessSubscription()이 호출 될 때 fechaAlta가 지정되면 널 (null)로 설정하지 않으므로 널이 될 수 없습니다.

이를 호출 dateTime으로가 null가 아닌 경우는 null이 될하지 않습니다 :

ProcessSubscription("string1","string2"); 

또는

ProcessSubscription("string1","string2", null); 
:이를 호출하는 경우

ProcessSubscription("string1","string2", dateTime); 

그것은 단지 null이됩니다

다음이 필요합니다.

어딘가에 기능에

fechaAlta = null; 

또는 ... ....

함수에서 null로 설정하는 논리는 어디에 있습니까?

+0

나는 당신이 말하는 것을 이해합니다. ProcessSubscription을 호출 할 때 매개 변수가 지정되지 않은 경우 매개 변수가 기본값 (null)을 사용하고 calss 속성을 설정하는 데 사용한다고 가정합니다. 내가 말하는 것은 매개 변수가 실제로 null인지 확인하고 예약어가 "null"인 속성을 null로 설정해야한다는 것입니다. 나는 다시 시도 할 것이지만 나는 이미 같은 결과로 당신의 말을했습니다. –

0

문제점을 발견했습니다. 클래스 속성의 set 메서드에서 코드 문제가 발생했습니다. 값이! = null 인 경우에만 속성을 설정했습니다. 나는 정말로 멍청했다 모두에게 감사합니다.