2016-08-08 7 views
1

Ich habe ein Stück Code, der in eine Tabelle einfügt. Einfach gesagt, habe ich eine Tabelle mit StrukturEntity Framework setzte das Byte-Feld intermittierend auf 255

Table1:

  • Id int PK
  • Typ tinyint
  • Der Status Tinyint

Nachdem in unserem ART graben, ich festgestellt, dass EF kann den Wert intervallmäßig auf 255 setzen, wenn der Wert im Bereich (1-3) liegen sollte. Ich verstehe 255 ist der Maximalwert für Tinyint in SQL Server, aber ich habe keine Standardwerte sowohl in der Tabellendefinition als auch in EDMX.

Verbrauch:

//OUTAGE_TYPE 
public enum OUTAGE_TYPE 
{ 
     Unknown = -1, 
     SwitchingPlan = 1, 
     PlannedIncident = 2, 
     UnplannedIncident = 3 
} 

//CREATE INSTANCE 
var outage = new Outage 
     { 
      OutageTypeId = (byte)OUTAGE_TYPE.SwitchingPlan, 
      OutageStatusId = (byte)OUTAGE_STATUS.Approved, 
      IncidentRID = incident.RID, 
      WorkRID = incident.WorkRID, 
      ETR = incident.ETR, 
      DateInserted = Time.Now(), 
      DateUpdated = Time.Now() 
     }; 

Captured SQL:

INSERT [dbo].[Outage]([OutageTypeId], [OutageStatusId], [IncidentRID], [WorkRID], [ETR], [DateInserted], [DateUpdated]) 
VALUES (@0, @1, @2, NULL, @3, @4, @5) 
SELECT [Id] 
FROM [dbo].[Outage] 
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity() 
-- @0: '255' (Type = Byte, Size = 1) 
-- @1: '1' (Type = Byte, Size = 1) 
-- @2: 'INC 11000700' (Type = String, Size = 255) 
-- @3: '05-08-2016 10:05:52' (Type = DateTime2) 
-- @4: '05-08-2016 22:05:22' (Type = DateTime2) 
-- @5: '05-08-2016 22:05:22' (Type = DateTime2) 
-- Executing at 06-08-2016 00:06:00 +02:00 

Fehler:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Outage_OutageType". The conflict occurred in database "ONSP", table "dbo.OutageType", column 'Id'.

ich nicht in der Lage war, auf meinem lokalen Rechner zu reproduzieren, vielleicht habt ihr diese Erfahrung vor . Danke vielmals.

Antwort

1

Nachdem mein Kollege und ich graben, haben wir die Ursache für dieses Problem gefunden. Erste -1, ist kein gültiger Wert für ein Byte und direkte Umwandlung wird nicht Ausnahme wirft aber nachgeben byte.MaxValue

void Main() 
{ 
    var type = OUTAGE_TYPE.Unknown; 
    var result = (byte)type; 

    //result = 255!!! 
    Console.WriteLine(result); 
} 

public enum OUTAGE_TYPE 
{ 
     Unknown = -1, 
     SwitchingPlan = 1, 
     PlannedIncident = 2, 
     UnplannedIncident = 3 
} 
+0

Ihre Frage hatte 'Unbekannt = 0 'drin. Hoffentlich wissen Sie nun, dass Sie den * tatsächlichen * Code in die Frage einfügen müssen: basierend auf Ihrer ursprünglichen Frage gab es keine Möglichkeit, dass jemand hätte antworten können. Aber gut, dass Sie die Frage bearbeitet und eine gute Antwort gegeben haben, die möglicherweise anderen helfen könnte, das gleiche Problem zu haben. – hvd

+0

Ja, es war Uknown = 0 im ursprünglichen Post, weil ich den Code aus dem aktuellen Zweig kopiert habe, und nicht aus dem Release-Zweig in unserem PROD. das tut mir leid. – rdagumampan