2015-01-30 22 views
10

Mam następujący problem z identyfikatorami aktualizacji po zaimportowaniu do mojego dB:Kod Błąd przy pierwszym źródle migracji: binarny operator Equal nie jest zdefiniowany dla typów "System.Nullable" 1 [System.Int32] 'i' System.Int32 '

context.ClientPromos.AddOrUpdate(
      cp => new { cp.ClientID, cp.Recommendation_ID, cp.PromoCode_ID }, 

      new ClientPromo 
      { 
       ClientID = 0, 
       Recommendation_ID = Rec30Off.RecommendationID, 
       PromoCode_ID = pc30PerOffProd.PromoCodeID 
      }, 
      new ClientPromo 
      { 
       ClientID = 0, 
       Recommendation_ID = RecKnow.RecommendationID, 
      }, 

      new ClientPromo 
      { 
       ClientID = 0, 
       Recommendation_ID = RecCall.RecommendationID, 
      }, 
); 

context.SaveChanges(); 

Od cp.Recommendation_ID i cp.PromoCode_IDint? datatypes, robi się następujący błąd:

The binary operator Equal is not defined for the types 'System.Nullable`1[System.Int32]' and 'System.Int32'.

mam oglądali ten artykuł i dodał modelBuilder - kod IsOptional() opisany, ale nie wor k dla mnie i pojawia się ten sam błąd w this question.

Jeśli zmienię:

cp => new { cp.ClientID, cp.Recommendation_ID, cp.PromoCode_ID } 

Do:

cp => new { cp.ClientID } 

To działa dobrze, ale to nie będzie działać, jeśli muszę zaktualizować rekord będzie tylko powielać każdy rekord w tabeli.

+0

pan rozwiązać swój problem? Może to pomoże http://stackoverflow.com/questions/16818382/the-binary-operator-equal-is-not-defined-between-type-nullableint32-and-int32 –

Odpowiedz

-1

Nie jestem pewien, ile jesteś zaznajomiony z Nullable Types (C# Programming Guide) ale długie opowiadanie jak sama nazwa oznacza,

A nullable type can represent the correct range of values for its underlying value type, plus an additional null value.

Można przydzielić normalny typ do typu wartości pustych, ale nie na odwrót, jak gdy wartość wynosi null, będziemy mieć kłopoty z kompilatorem, który wychwyci ten błąd w czasie kompilacji.

Jednak istnieje łatwiejszy sposób obejścia tego problemu, jeśli jest to jedyny i proste, jeśli instrukcja będzie sortować wszystko przed przydzieleniem.

var myIntVar = myIntVar_Nullable ?? default(int); 

który jest cukier syntaktyczny dla

var myIntVar = myIntVar_Nullable == null ? default(int) : myIntVar_Nullable; 
+0

Ale dzieje się tak tylko wtedy, gdy umieszczam kolumny zostać zidentyfikowane dla funkcji addorupdate dla pierwszej migracji kodu. Nie wiem, jak mogę to zastosować. Jeśli usunę te kolumny, to działa dobrze, ale w ten sposób kontynuuje dodawanie wierszy do bazy danych zamiast ich aktualizowania. –

+0

Zajmę się tym bardziej szczegółowo niż: – Mehrad