2016-09-20 65 views
0

我有兩個表(Testresult & SampleCollection)在數據庫中相互鏈接。我在實體框架中創建了一個Post控制器,它將數據同時保存到兩個表中。但是在將數據保存到兩個表中時應該應用一個特定的條件。我有狀態A,狀態B,條件C及條件d:實體框架發佈方法

條件A是下面的屏幕截圖:

[ 
    { 
    "TestResult": { 
     "iOutletStorageId": 50061, 
     "dLastDeliveryDate": "2016-9-14", 
     "szMarkingCertificate": "Tank 1: Mark Cert", 
     "iFirstResultId": "1", 
     "iSecondResultId": "2", 
     "szFirstResultRemark": "Tank 1: First Result Remarks", 
     "szSecondResultRemark": "Tank 1: Second Result Remarks 2", 
     "szSiteVisitNo": "SVN01", 
     "dTransdate": "2016-9-20 10:4:10.754", 
     "iOutletId": 756 
    }, 
    "MySampleCollections": { 
     "iPPMSTestResultId": 0, 
     "szZonalLabelNumber": "Tank 1: Sample Lbl No Zonal", 
     "szZonalSampleQty": "275", 
     "szZonalSerialNumber": "Tank 1: Seal No. Zonal", 
     "szCLabLabelNumber": "Tank 1: Sample Lbl No C-Lab", 
     "szCLabSampleQty": "275", 
     "szCLabSerialNumber": "Tank 1: Seal No. C-Lab", 
     "szGSALabelNumber": "Tank 1: Sample Lbl No GSA", 
     "szGSASampleQty": "275", 
     "szGSASerialNumber": "Tank 1: Seal No. GSA", 
     "szOutletLabelNumber": "Tank 1: Sample Lbl No Outlet", 
     "szOutletSampleQty": "275", 
     "szOutletSerialNumber": "Tank 1: Seal No. Outlet", 
     "szOutletSampleRecievedBy": "Tank 1: Sample Received By Outlet", 
     "szRetentionLabelNumber": "Tank 1: Sample Lbl No Retention", 
     "szRetentionSampleQty": "275", 
     "szRetentionSerialNumber": "Tank 1: Seal No. Retention" 
    } 
    } 
] 

條件B是下面的屏幕截圖:

[ 
    { 
    "TestResult": { 
     "iOutletStorageId": 50062, 
     "dLastDeliveryDate": "2016-9-14", 
     "szMarkingCertificate": "Tank 2: Cert #", 
     "iFirstResultId": "1", 
     "iSecondResultId": "2", 
     "szFirstResultRemark": "Tank 2: First test Remarks", 
     "szSecondResultRemark": "Tank 2: Second Test Remarks", 
     "szSiteVisitNo": "SVN02", 
     "dTransdate": "2016-9-20 10:4:10.754", 
     "iOutletId": 756 
    }, 
    "MySampleCollections": { 
     "iPPMSTestResultId": 0, 
     "szZonalLabelNumber": "Tank 1: Sample Lbl No Zonal", 
     "szZonalSampleQty": "275", 
     "szZonalSerialNumber": "Tank 1: Seal No. Zonal", 
     "szCLabLabelNumber": "Tank 1: Sample Lbl No C-Lab", 
     "szCLabSampleQty": "275", 
     "szCLabSerialNumber": "Tank 1: Seal No. C-Lab", 
     "szGSALabelNumber": "Tank 1: Sample Lbl No GSA", 
     "szGSASampleQty": "275", 
     "szGSASerialNumber": "Tank 1: Seal No. GSA", 
     "szOutletLabelNumber": "Tank 1: Sample Lbl No Outlet", 
     "szOutletSampleQty": "275", 
     "szOutletSerialNumber": "Tank 1: Seal No. Outlet", 
     "szOutletSampleRecievedBy": "Tank 1: Sample Received By Outlet", 
     "szRetentionLabelNumber": "Tank 1: Sample Lbl No Retention", 
     "szRetentionSampleQty": "275", 
     "szRetentionSerialNumber": "Tank 1: Seal No. Retention" 
    } 
    } 
] 

條件C是以下截圖:

[ 
    { 
    "TestResult": { 
     "iOutletStorageId": 50063, 
     "dLastDeliveryDate": "2016-9-14", 
     "szMarkingCertificate": "Tank 2: Cert #", 
     "iFirstResultId": "1", 
     "iSecondResultId": "2", 
     "szFirstResultRemark": "Tank 2: First test Remarks", 
     "szSecondResultRemark": "Tank 2: Second Test Remarks", 
     "szSiteVisitNo": "SVN02", 
     "dTransdate": "2016-9-20 10:4:10.754", 
     "iOutletId": 756 
    }, 
    "MySampleCollections": { 
     "iPPMSTestResultId": 0, 
     "szZonalLabelNumber": "", 
     "szZonalSampleQty": "", 
     "szZonalSerialNumber": "", 
     "szCLabLabelNumber": "", 
     "szCLabSampleQty": "", 
     "szCLabSerialNumber": "", 
     "szGSALabelNumber": "", 
     "szGSASampleQty": "", 
     "szGSASerialNumber": "", 
     "szOutletLabelNumber": "", 
     "szOutletSampleQty": "", 
     "szOutletSerialNumber": "", 
     "szOutletSampleRecievedBy": "", 
     "szRetentionLabelNumber": "", 
     "szRetentionSampleQty": "", 
     "szRetentionSerialNumber": "" 
    } 
    } 
] 

條件d是以下截圖:

[ 
    { 
    "TestResult": { 
     "iOutletStorageId": 50063, 
     "dLastDeliveryDate": "2016-9-14", 
     "szMarkingCertificate": "Tank 2: Cert #", 
     "iFirstResultId": "1", 
     "iSecondResultId": "2", 
     "szFirstResultRemark": "Tank 2: First test Remarks", 
     "szSecondResultRemark": "Tank 2: Second Test Remarks", 
     "szSiteVisitNo": "SVN02", 
     "dTransdate": "2016-9-20 10:4:10.754", 
     "iOutletId": 756 
    } 
    } 
] 

現在我想在時間保存兩行或多行。

當我通過條件A & B,這是正確的保存到數據庫 當我通過條件A & C,它是正確保存到數據庫 當我通過條件A & d,我得到一個錯誤。

這個想法是,第二個表將從第一個表中獲得它的ID。

這裏是我的代碼:

public int PostTestResultObj(List<TestAndSampleResult> testandsampleresult) 
     { 
      long testResultId = 0; 
      if (testandsampleresult != null) 
       foreach (TestAndSampleResult orderdet in testandsampleresult) 
       { 
        mdlTestResult NewTestResult = new mdlTestResult 
        { 
         iOutletStorageId = orderdet.TestResult.iOutletStorageId, 
         dLastDeliveryDate = orderdet.TestResult.dLastDeliveryDate, 
         szMarkingCertificate = orderdet.TestResult.szMarkingCertificate, 
         iFirstResultId = orderdet.TestResult.iFirstResultId, 
         iSecondResultId = orderdet.TestResult.iSecondResultId, 
         szFirstResultRemark = orderdet.TestResult.szFirstResultRemark, 
         szSecondResultRemark = orderdet.TestResult.szSecondResultRemark, 
         szSiteVisitNo = orderdet.TestResult.szSiteVisitNo, 
         dTransdate = orderdet.TestResult.dTransdate, 
         iOutletId = orderdet.TestResult.iOutletId 
        }; 
       SampleCollections newsamplecollectionmodel = new SampleCollections 
       { 
        szZonalLabelNumber = orderdet.MySampleCollections.szZonalLabelNumber, 
        szZonalSampleQty = orderdet.MySampleCollections.szZonalSampleQty, 
        szZonalSerialNumber = orderdet.MySampleCollections.szZonalSerialNumber, 
        szCLabLabelNumber = orderdet.MySampleCollections.szCLabLabelNumber, 
        szCLabSampleQty = orderdet.MySampleCollections.szCLabSampleQty, 
        szCLabSerialNumber = orderdet.MySampleCollections.szCLabSerialNumber, 
        szGSALabelNumber = orderdet.MySampleCollections.szGSALabelNumber, 
        szGSASampleQty = orderdet.MySampleCollections.szGSASampleQty, 
        szGSASerialNumber = orderdet.MySampleCollections.szGSASerialNumber, 
        szOutletLabelNumber = orderdet.MySampleCollections.szOutletLabelNumber, 
        szOutletSampleQty = orderdet.MySampleCollections.szOutletSampleQty, 
        szOutletSerialNumber = orderdet.MySampleCollections.szOutletSerialNumber, 
        szOutletSampleRecievedBy = orderdet.MySampleCollections.szOutletSampleRecievedBy, 
        szRetentionLabelNumber = orderdet.MySampleCollections.szRetentionLabelNumber, 
        szRetentionSampleQty = orderdet.MySampleCollections.szRetentionSampleQty, 
        szRetentionSerialNumber = orderdet.MySampleCollections.szRetentionSerialNumber 
       }; 

       DataTable mydtTransReslt = Uow.tresult.GetTestResultNo(NewTestResult.iOutletStorageId, 
              NewTestResult.dLastDeliveryDate, NewTestResult.szMarkingCertificate, 
              NewTestResult.iFirstResultId, NewTestResult.iSecondResultId, 
              NewTestResult.szFirstResultRemark, NewTestResult.szSecondResultRemark, 
              NewTestResult.szSiteVisitNo, NewTestResult.dTransdate, NewTestResult.iOutletId); 

       if (mydtTransReslt.Rows.Count > 0) 
       { 
        testResultId = Convert.ToInt32(mydtTransReslt.Rows[0]["NewPPMSTestResult"]); 
       } 

       if (testResultId > 0) 
       { 
        long samples = Uow.spleCollections.GetSampleCollectionsNo(testResultId, 
          newsamplecollectionmodel.szZonalLabelNumber, 
          newsamplecollectionmodel.szZonalSampleQty, 
          newsamplecollectionmodel.szZonalSerialNumber, 
          newsamplecollectionmodel.szCLabLabelNumber, 
          newsamplecollectionmodel.szCLabSampleQty, 
          newsamplecollectionmodel.szCLabSerialNumber, 
          newsamplecollectionmodel.szGSALabelNumber, 
          newsamplecollectionmodel.szGSASampleQty, 
          newsamplecollectionmodel.szGSASerialNumber, 
          newsamplecollectionmodel.szOutletLabelNumber, 
          newsamplecollectionmodel.szOutletSampleQty, 
          newsamplecollectionmodel.szOutletSerialNumber, 
          newsamplecollectionmodel.szOutletSampleRecievedBy, 
          DateTime.UtcNow, 
          newsamplecollectionmodel.szRetentionLabelNumber, 
          newsamplecollectionmodel.szRetentionSampleQty, 
          newsamplecollectionmodel.szRetentionSerialNumber); 
       } 
       else 
       { 
        mydtTransReslt.Columns.Add("Exception", typeof (string)); 
        mydtTransReslt.Rows.Add("Sorry!!! Transaction Failed"); 
       } 
      } 
     return 1; 
    } 

是否有可能對我來說,通過這兩個條件A & d沒有得到任何錯誤。 如果可能,請如何? 謝謝,Somad

+0

網站注:考慮像Automapper這樣的對象映射器,因爲它可以大大地清理你的代碼 – Shoe

回答

0

我走過來把下面的代碼來解決我的問題:

public int PostTestResultObj(List<TestAndSampleResult> testandsampleresult) 
    { 
     long testResultId = 0; 

     if (testandsampleresult != null) 
      foreach (TestAndSampleResult orderdet in testandsampleresult) 
      { 
       if (orderdet.TestResult != null) //Making sure our results object is passing null 
       { 
        mdlTestResult NewTestResult = new mdlTestResult 
        { 
         iOutletStorageId = orderdet.TestResult.iOutletStorageId, 
         dLastDeliveryDate = orderdet.TestResult.dLastDeliveryDate, 
         szMarkingCertificate = orderdet.TestResult.szMarkingCertificate, 
         iFirstResultId = orderdet.TestResult.iFirstResultId, 
         iSecondResultId = orderdet.TestResult.iSecondResultId, 
         szFirstResultRemark = orderdet.TestResult.szFirstResultRemark, 
         szSecondResultRemark = orderdet.TestResult.szSecondResultRemark, 
         szSiteVisitNo = orderdet.TestResult.szSiteVisitNo, 
         dTransdate = orderdet.TestResult.dTransdate, 
         iOutletId = orderdet.TestResult.iOutletId 
        }; 

        //Persist the result 
        DataTable mydtTransReslt = Uow.tresult.GetTestResultNo(NewTestResult.iOutletStorageId, 
                 NewTestResult.dLastDeliveryDate, 
                 NewTestResult.szMarkingCertificate, 
                 NewTestResult.iFirstResultId, 
                 NewTestResult.iSecondResultId, 
                 NewTestResult.szFirstResultRemark, 
                 NewTestResult.szSecondResultRemark, 
                 NewTestResult.szSiteVisitNo, 
                 NewTestResult.dTransdate, 
                 NewTestResult.iOutletId); 

        testResultId = 0; 
        if (mydtTransReslt.Rows.Count > 0) //Result inserted successfully 
        { 
         //Get the id of new result 
         testResultId = Convert.ToInt32(mydtTransReslt.Rows[0]["NewPPMSTestResult"]); 

         if (testResultId > 0)//Result insert was successful 
         { 
          if (orderdet.MySampleCollections != null && testResultId > 0) //Samples have been passed from client 
          { 
           foreach (SampleCollection Sample in orderdet.MySampleCollections) 
           { 
            long samples = Uow.spleCollections.GetSampleCollectionsNo(testResultId, 
                     //newsamplecollectionmodel.iPPMSTestResultId, 
                     Sample.iSampleTypeId, 
                     Sample.szLabelNumber, 
                     Sample.iSampleQty, 
                     Sample.szSerialNumber, 
                     Sample.szRecievedBy); 
           } 
          } 
         } 
         else 
         { 
          mydtTransReslt.Columns.Add("Exception", typeof(string)); 
          mydtTransReslt.Rows.Add("Sorry!!! Transaction Failed"); 
         } 
        } 
       } 
      } 
     return 1; 
    } 

它節省正是我希望它成爲的方式...... 感謝