2013-01-03 76 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。