2016-08-08 2 views
1

テーブルに挿入するコードがあります。単純に、私は構造を持つテーブルを持っているEntity Frameworkが断続的にバイトフィールドを255に設定しました

表1

  • のId int型のPK
  • がステータスtinyint型

当社PRODに掘り後、私はことを観察型TINYINT値が範囲(1-3)になると、EFは値を255に間欠的にデフォルト設定している可能性があります。 255はSQL Serverのtinyintの最大値ですが、テーブル定義とEDMXの両方にデフォルトはありません。

使用法:

//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() 
     }; 

キャプチャ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 

エラー:

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

は、私は多分あなたたちは前にこれを経験している、私のローカルマシン上で再現することができませんでした。どうもありがとう。

答えて

1

私の同僚と私が掘り起こした後、私たちはこの問題の根本原因を発見しました。 まず-1、バイトと直接変換のための有効な値は、例外をスローしませんが、あなたの質問はそれで '0' = '不明だった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

に生じるであろうではありません。うまくいけば、実際の*コードを質問に含めることを知っていればいいと思います。オリジナルの質問に基づいて、誰も答えることができなかったのです。しかし、あなたが質問を編集し、同じ問題を抱えている他の人を助けることができる良い答えを与えたことは良いことです。 – hvd

+0

はい、元のポストでUknown = 0でした。なぜなら、私たちのPRODのリリースブランチからではなく、現在のブランチからコードをコピーしたからです。そのために残念。 – rdagumampan

関連する問題