1

次のようなサービスメソッドがあります。

[OperationContract]
public void CreateIcd9(int icd9ID, string code, string description, string specialty)
{          
    var count = from icd in clogicEntities.ICD9
                where icd.ID == icd9ID
                select icd;

    if (count.Count() >= 1)
    {
        var icd9 = clogicEntities.ICD9.Where(icd => (icd.ID == icd9ID)).SingleOrDefault();
        if (icd9 != null)
        {
            icd9.CODE = code;
            icd9.DESCRIPTION = description;
            icd9.SPECIALTY = specialty;
        }
    }
    else
    {
         ICD9 icdNew =  new ICD9()
         {
             ID = icd9ID,
             CODE = code,
             DESCRIPTION = description,
             SPECIALTY = specialty
         };                

        // Insert Icd9
        clogicEntities.ICD9.AddObject(icdNew);
    }

    clogicEntities.SaveChanges();
}

icd9ID = 1992401733 今日まではすべて問題ありません。この例外を取得してこのメ​​ソッドを呼び出すと、例外が発生しました。

An error occurred while updating the entries. 
See the inner exception for details. ----> System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'ID', table '1224-CLOGIC.dbo.ICD9'; column does not allow nulls. INSERT fails.
The statement has been terminated

この問題を再現しようとしましたが、うまくいきません。MAX Int の問題だと思います: 2147483647 - MAX Int 1992401733 - 私の値 助けてください。

4

1 に答える 1

0

私の問題は、ID(pk) Identity(1,1) を持つ EF の ICD9 テーブルですが、SQL ICD9 テーブルでは ID(pk) Identity = false であることがわかりました。

clogicEntities.ICD9.AddObject(icdNew);

ID なしで 3 つの値 (コード、説明、専門分野) を SQL に渡すだけです。また、サービスに 0 の int 値を渡した理由は、パラメーターの変更後にサービス参照を更新するのを忘れたためです。

よろしく。

于 2012-09-16T06:32:36.980 に答える