2015-01-30 7 views
10

Ich habe das folgende Problem mit meinen Update-IDs beim Seeding zu meinem db:Code First Migration Seed Fehler: Der binäre Operator Equal ist nicht definiert für die Typen 'System.Nullable`1 [System.Int32]' und '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(); 

Seit cp.Recommendation_ID und cp.PromoCode_IDint? datatypes sind, wird es den folgenden Fehler:

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

ich diesen Artikel angesehen haben, und fügte hinzu, die modelBuilder - IsOptional() Code beschrieben, aber es funktioniert nicht wor k für mich und ich bekomme den gleichen Fehler in this question.

Wenn ich ändern:

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

An:

cp => new { cp.ClientID } 

Es funktioniert gut, aber das wird nicht funktionieren, wenn ich einen Datensatz aktualisieren müssen es einfach jeden Datensatz in der Tabelle duplizieren.

+0

haben Sie lösen Ihr Problem? Vielleicht hilft das http://stackoverflow.com/questions/16818382/the-binary-operator-equal-is-not-defined-between-type-nullabeitt32-and-int32 –

Antwort

-1

Ich bin nicht sicher, wie viel Sie mit Nullable Types (C# Programming Guide) vertraut sind, aber die lange Geschichte kurz, wie der Name steht,

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

Sie können eine normale Art zu einem Nullable Type zuordnen, aber nicht umgekehrt, wie wenn der Wert null ist, werden wir in Schwierigkeiten geraten, Compiler, die diesen Fehler in der Kompilierzeit fangen.

Es gibt jedoch einfachere Möglichkeiten, dieses Problem zu umgehen, wenn das Ihr einziger ist und eine einfache if-Anweisung alles vor der Zuweisung sortiert.

var myIntVar = myIntVar_Nullable ?? default(int); 

des für

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

Aber das passiert nur, wenn ich die Spalten platziere für die Funktion addorupdate für die erste Migration des Codes identifiziert werden. Ich bin mir nicht sicher, wie ich das hier anwenden kann. Wenn ich diese Spalten lösche, funktioniert es gut, aber dadurch fügt es der Datenbank weiterhin Zeilen hinzu, anstatt sie zu aktualisieren. –

+0

Ich werde es genauer betrachten dann – Mehrad

Verwandte Themen