2013-01-03 74 views
-1

我使用LINQ to SQL來保存中有許多子實體的實體,而只是想知道如果沒有人得到這個錯誤:The identifier cannot be an empty string標識符不能爲空字符串

我只是想知道如果任何人已經遇到它,你做了什麼來解決這個問題?也許我會很幸運,你的解決方案之一將工作。

其中代碼失敗

public void SaveJob(object sender, CancelEventArgs e) 
{ 

    Job = JobEditorUtilities.CreateNewJob(jobid, SettingsManager.OpsMgrSettings.Region.Trim(), _db); 
    try 
    { 
     var canSaveJob = CanSaveJob(); 
     if (canSaveJob) 
     { 
      JobEditorUtilities.PrepareJobForSaving(Job); 
      if (newjob) 
       _db.JobNumbers.InsertOnSubmit(Job); 

      var a = _db.GetChangeSet(); 
      _db.SubmitChanges(); // fails here 
      RenameJobNumberIfNecessary(); 

     } 
     else 
     { 
      e.Cancel = true; 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 


    public static JobNumber CreateNewJob(int jobid, string region, DataAccessDataContext dc) 
    { 
     var job = new JobNumber(); 
     job.JobID = jobid; 

     InitializeSubContractor(dc, job); 
     job.GWDRunSummaryDatas = new GWDRunSummaryData(); 
     job.CorrectionsApplieds = new CorrectionsApplied(); 
     job.MonitorInfos = new MonitorInfo(); 
     InitializeGWDHeader(dc, job); 
     job.Rpt_Details = new Rpt_Detail(); 
     job.RunningModes = new RunningMode(); 
     job.SafetyIssuesTotals = new SafetyIssuesTotals(); 
     job.SafetyIssueTotals = new SafetyIssueTotals(); 
     switch (region) 
     { 
      case "NA": 
       InitializeNA_Header(dc, job); 
       job.NA_WRdetails = new NA_WRdetail(); 
       InitializeNA_BillingCompany(dc, job); 
       job.NA_RigDetails = new NA_RigDetail(); 
       job.NA_Holedetails = new NA_Holedetail(); 
       job.NA_Salesmans = new NA_Salesman(); 
       InitializeNA_WL_Company(dc, job); 
       break; 
      case "EU": 
       InitializeEAC_Header(dc, job); 
       break; 
     } 



     return job; 
    } 
    private static void InitializeNA_WL_Company(DataAccessDataContext dc, JobNumber job) 
    { 
     job.NA_WL_Companies = new NA_WL_Company(); 
     job.NA_WL_Companies.Resource = 
      dc.Resources.FirstOrDefault(r => r.Refno == job.NA_WL_Companies.WL_companyid); 
    } 

    private static void InitializeGWDHeader(DataAccessDataContext dc, JobNumber job) 
    { 
     job.GWD_Header2s = new GWD_Header2(); 
     job.GWD_Header2s.GWDDirComp2 = 
      dc.GWDDirComp2s.FirstOrDefault(g => g.ID == job.GWD_Header2s.MWD_Company); 

    } 


    private static void InitializeNA_BillingCompany(DataAccessDataContext dc, JobNumber job) 
    { 
     job.NA_BillingCompanies = new NA_BillingCompany(); 
     job.NA_BillingCompanies.Resource = 
      dc.Resources.FirstOrDefault(r => r.Refno == job.NA_BillingCompanies.Billingcompanyid); 
    } 
    private static void InitializeSubContractor(DataAccessDataContext dc, JobNumber job) 
    { 
     job.Subcontractors = new Subcontractor(); 
     job.Subcontractors.Resource = 
      dc.Resources.FirstOrDefault(r => r.Refno == job.Subcontractors.SubcontractorID); 
    } 

    private static void InitializeNA_Header(DataAccessDataContext dc, JobNumber job) 
    { 
     job.NA_Headers = new NA_Header(); 
     job.NA_Headers.RigType1 = dc.RigTypes.FirstOrDefault(r => r.ID == job.NA_Headers.RigType); 
     job.NA_Headers.Well_Locn1 = dc.Well_Locns.FirstOrDefault(w => w.ID == job.NA_Headers.Well_Locn); 
    } 

    private static void InitializeEAC_Header(DataAccessDataContext dc, JobNumber job) 
    { 
     job.EAC_Headers = new EAC_Header(); 

    } 
+1

你的代碼是什麼? –

+0

這是一個查詢處理錯誤。嘗試並在你的Linq quer(y)(ies)之前放置一個斷點,以找出哪一個給你帶來麻煩。然後發佈那部分代碼,如果你願意(在編輯你的問題時)。 –

+0

您始終可以使用SQL Server Profiler確定由LinqToSQL生成哪個SQL語句,然後在SQL Management Studio中對其進行跟蹤。顯然,一些錯誤的值被傳遞給SQL查詢,但我懷疑沒有代碼就可以回答錯誤。 – platon

回答

0

我最終重新開始,只是初始化子實體根據需要,而不是在一次初始化所有這些這可能幫助不大,但這裏。這似乎解決了問題

0

此問題是由您的一個類字段映射具有空白的「源」屬性引起的。如果您使用的是LINQ to SQL設計器,請單擊每個類的每個字段,並確保「Source」屬性不爲空。如果您要手動創建類,請確保在「名稱」字段中沒有包含空白字符串的ColumnAttributes。