C# DataContext似乎正在从数据库中提取同一记录的两个副本
我有一个DataContext,它似乎在从数据库中取出同一记录的两个副本。数据库中只有一条这样的记录 下面是执行此操作的代码:C# DataContext似乎正在从数据库中提取同一记录的两个副本,c#,linq,linq-to-sql,datacontext,C#,Linq,Linq To Sql,Datacontext,我有一个DataContext,它似乎在从数据库中取出同一记录的两个副本。数据库中只有一条这样的记录 下面是执行此操作的代码: dataAccessContext = new DataAccessDataContext("Data Source=" + SettingsManager.OpsMgrSettings.DBDIR + ";default lock tim
dataAccessContext =
new DataAccessDataContext("Data Source=" + SettingsManager.OpsMgrSettings.DBDIR +
";default lock timeout=10000");
调用上述函数后,当我调试dataAccessContext时,我会看到一个名为JobNumbers的实体。在该实体内部,还有另一个名为SafetyIssues的实体,它有2条记录,而不是1条。它们是完全相同的记录。数据库只显示一条记录,但显示了它如何在dataAccessContext中两次提取同一条记录
即使稍后绑定到列表框,它也会在列表框中显示相同的记录两次。如果我单击一个,它们都会被选中
以下是JobNumbers实体的dbml设计(如果有帮助):
这里是SateyIssues实体的dbml(如果有帮助):
我编写的dbml部分类代码:
partial class SafetyIssue
{
partial void OnLoaded()
{
JobNumber.CalculateSafetyIssueTotals();
}
}
partial class SafetyIssueTotals
{
public void RefreshTotals(List<SafetyIssue> safetyIssues)
{
TotalSubmissions = safetyIssues.Count(c => c.SafetyCategory == 1);
TotalInductions = safetyIssues.Count(c => c.SafetyCategory == 2);
TotalSafetyMeetings = safetyIssues.Count(c => c.SafetyCategory == 3);
TotalToolboxTalk = safetyIssues.Count(c => c.SafetyCategory == 4);
TotalRecognitions = safetyIssues.Count(c => c.SafetyCategory == 5);
TotalIncidents = safetyIssues.Count(c => c.SafetyCategory == 6);
ActualSafetySubmissions = safetyIssues.Count(c => c.JobSafetyNo.Trim() != "");
}
}
partial class JobNumber:IDataErrorInfo
{
public void CalculateSafetyIssueTotals()
{
if (SafetyIssuesTotals == null)
SafetyIssuesTotals = new SafetyIssuesTotals();
/* If I comment the part below out, it works. Seems like if I use the SafetyIssues entity at all (in this case SafetyIssues.Count() to assign things, the problem happens */
SafetyIssuesTotals.TotalActualSafetySubmissions = SafetyIssues.Count;
SafetyIssuesTotals.TotalIncidents =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 6);
SafetyIssuesTotals.TotalInductions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 2);
SafetyIssuesTotals.TotalRecognitions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 5);
SafetyIssuesTotals.TotalSafetyMeetings =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 3);
SafetyIssuesTotals.TotalSubmissions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 1);
SafetyIssuesTotals.TotalToolboxTalk =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 4);
//////////////////////////////////////////////////////////////////////////////////////
}
public bool NoReportedSafetyIssues
{
get
{
_noReportedSafetyIssues = SafetyIssues.Count == 0;
return _noReportedSafetyIssues;
}
set
{
_noReportedSafetyIssues = value;
SendPropertyChanged("NoReportedSafetyIssues");
}
}
}
部分类安全问题
{
局部空腔加载()
{
JobNumber.CalculatesAffetySueToals();
}
}
部分类安全问题
{
公共无效刷新总数(列出安全问题)
{
TotalSubmissions=safetyIssues.Count(c=>c.SafetyCategory==1);
TotalInclutions=safetyIssues.Count(c=>c.SafetyCategory==2);
TotalSafetyMeetings=safetyIssues.Count(c=>c.SafetyCategory==3);
TotalToolboxTalk=safetyIssues.Count(c=>c.SafetyCategory==4);
TotalRecognitions=safetyIssues.Count(c=>c.SafetyCategory==5);
TotalIncidents=safetyIssues.Count(c=>c.SafetyCategory==6);
ActualSafetySubmissions=safetyIssues.Count(c=>c.JobSafetyNo.Trim()!=“”);
}
}
部分类作业编号:IDataErrorInfo
{
public void CalculatesAffetySueTowals()
{
如果(SafetyIssuesTotals==null)
SafetyIssuesTotals=新的SafetyIssuesTotals();
/*如果我将下面的部分注释掉,它就会工作。似乎如果我使用SafetyIssues实体(在本例中是SafetyIssues.Count()来分配内容,问题就会发生*/
SafetyIssuesTotals.TotalActualSafetySubmissions=SafetyIssues.Count;
安全事件总数=
SafetyIssues.Count(s=>s.SafetyCategory1!=null&&s.SafetyCategory1.SafetyCategoryID==6);
安全性问题总归纳法=
SafetyIssues.Count(s=>s.SafetyCategory1!=null&&s.SafetyCategory1.SafetyCategoryID==2);
安全性问题总计识别=
SafetyIssues.Count(s=>s.SafetyCategory1!=null&&s.SafetyCategory1.SafetyCategoryID==5);
安全问题总安全会议=
SafetyIssues.Count(s=>s.SafetyCategory1!=null&&s.SafetyCategory1.SafetyCategoryID==3);
安全性问题总计提交=
SafetyIssues.Count(s=>s.SafetyCategory1!=null&&s.SafetyCategory1.SafetyCategoryID==1);
SafetyIssuesTotals.TotalToolboxTalk=
SafetyIssues.Count(s=>s.SafetyCategory1!=null&&s.SafetyCategory1.SafetyCategoryID==4);
//////////////////////////////////////////////////////////////////////////////////////
}
公共图书馆不报告安全问题
{
得到
{
_noReportedSafetyIssues=SafetyIssues.Count==0;
返回-不报告安全问题;
}
设置
{
_noReportedSafetyIssues=值;
SendPropertyChanged(“无报告安全问题”);
}
}
}
我只是不明白为什么它要提取同一条记录的两个副本。希望你们能帮助。好吧,我解决了这个问题。问题出在我的dbml代码中。我想我是在作业有机会完成加载之前计算总数的。所以,当我在作业完成加载后将计算转移到时,它起了作用。下面是我更改的代码d: 之前
partial class SafetyIssue
{
partial void OnLoaded()
{
JobNumber.CalculateSafetyIssueTotals(); // I needed to move this to the JobNumber partial class
}
}
partial class SafetyIssueTotals
{
public void RefreshTotals(List<SafetyIssue> safetyIssues)
{
TotalSubmissions = safetyIssues.Count(c => c.SafetyCategory == 1);
TotalInductions = safetyIssues.Count(c => c.SafetyCategory == 2);
TotalSafetyMeetings = safetyIssues.Count(c => c.SafetyCategory == 3);
TotalToolboxTalk = safetyIssues.Count(c => c.SafetyCategory == 4);
TotalRecognitions = safetyIssues.Count(c => c.SafetyCategory == 5);
TotalIncidents = safetyIssues.Count(c => c.SafetyCategory == 6);
ActualSafetySubmissions = safetyIssues.Count(c => c.JobSafetyNo.Trim() != "");
}
}
partial class JobNumber:IDataErrorInfo
{
public void CalculateSafetyIssueTotals()
{
if (SafetyIssuesTotals == null)
SafetyIssuesTotals = new SafetyIssuesTotals();
SafetyIssuesTotals.TotalActualSafetySubmissions = SafetyIssues.Count;
SafetyIssuesTotals.TotalIncidents =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 6);
SafetyIssuesTotals.TotalInductions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 2);
SafetyIssuesTotals.TotalRecognitions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 5);
SafetyIssuesTotals.TotalSafetyMeetings =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 3);
SafetyIssuesTotals.TotalSubmissions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 1);
SafetyIssuesTotals.TotalToolboxTalk =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 4);
}
}
部分类安全问题
{
局部空腔加载()
{
JobNumber.CalculatesAffetySueTotals();//我需要将其移动到JobNumber分部类
}
}
部分类安全问题
{
公共无效刷新总数(列出安全问题)
{
TotalSubmissions=safetyIssues.Count(c=>c.SafetyCategory==1);
TotalInclutions=safetyIssues.Count(c=>c.SafetyCategory==2);
TotalSafetyMeetings=safetyIssues.Count(c=>c.SafetyCategory==3);
TotalToolboxTalk=safetyIssues.Count(c=>c.SafetyCategory==4);
TotalRecognitions=safetyIssues.Count(c=>c.SafetyCategory==5);
TotalIncidents=safetyIssues.Count(c=>c.SafetyCategory==6);
ActualSafetySubmissions=safetyIssues.Count(c=>c.JobSafetyNo.Trim()!=“”);
}
}
部分类作业编号:IDataErrorInfo
{
public void CalculatesAffetySueTowals()
{
如果(SafetyIssuesTotals==null)
SafetyIssuesTotals=新的SafetyIssuesTotals();
SafetyIssuesTotals.TotalActualSafetySubmissions=SafetyIssues.Count;
安全事件总数=
SafetyIssues.Count(s=>s.SafetyCategory1!=null&&s.SafetyCategory1.SafetyCategoryID==6);
安全性问题总归纳法=
partial class SafetyIssue
{
partial void OnLoaded()
{
JobNumber.CalculateSafetyIssueTotals();
}
}
partial class SafetyIssueTotals
{
public void RefreshTotals(List<SafetyIssue> safetyIssues)
{
TotalSubmissions = safetyIssues.Count(c => c.SafetyCategory == 1);
TotalInductions = safetyIssues.Count(c => c.SafetyCategory == 2);
TotalSafetyMeetings = safetyIssues.Count(c => c.SafetyCategory == 3);
TotalToolboxTalk = safetyIssues.Count(c => c.SafetyCategory == 4);
TotalRecognitions = safetyIssues.Count(c => c.SafetyCategory == 5);
TotalIncidents = safetyIssues.Count(c => c.SafetyCategory == 6);
ActualSafetySubmissions = safetyIssues.Count(c => c.JobSafetyNo.Trim() != "");
}
}
partial class JobNumber:IDataErrorInfo
{
public void CalculateSafetyIssueTotals()
{
if (SafetyIssuesTotals == null)
SafetyIssuesTotals = new SafetyIssuesTotals();
/* If I comment the part below out, it works. Seems like if I use the SafetyIssues entity at all (in this case SafetyIssues.Count() to assign things, the problem happens */
SafetyIssuesTotals.TotalActualSafetySubmissions = SafetyIssues.Count;
SafetyIssuesTotals.TotalIncidents =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 6);
SafetyIssuesTotals.TotalInductions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 2);
SafetyIssuesTotals.TotalRecognitions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 5);
SafetyIssuesTotals.TotalSafetyMeetings =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 3);
SafetyIssuesTotals.TotalSubmissions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 1);
SafetyIssuesTotals.TotalToolboxTalk =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 4);
//////////////////////////////////////////////////////////////////////////////////////
}
public bool NoReportedSafetyIssues
{
get
{
_noReportedSafetyIssues = SafetyIssues.Count == 0;
return _noReportedSafetyIssues;
}
set
{
_noReportedSafetyIssues = value;
SendPropertyChanged("NoReportedSafetyIssues");
}
}
}
partial class SafetyIssue
{
partial void OnLoaded()
{
JobNumber.CalculateSafetyIssueTotals(); // I needed to move this to the JobNumber partial class
}
}
partial class SafetyIssueTotals
{
public void RefreshTotals(List<SafetyIssue> safetyIssues)
{
TotalSubmissions = safetyIssues.Count(c => c.SafetyCategory == 1);
TotalInductions = safetyIssues.Count(c => c.SafetyCategory == 2);
TotalSafetyMeetings = safetyIssues.Count(c => c.SafetyCategory == 3);
TotalToolboxTalk = safetyIssues.Count(c => c.SafetyCategory == 4);
TotalRecognitions = safetyIssues.Count(c => c.SafetyCategory == 5);
TotalIncidents = safetyIssues.Count(c => c.SafetyCategory == 6);
ActualSafetySubmissions = safetyIssues.Count(c => c.JobSafetyNo.Trim() != "");
}
}
partial class JobNumber:IDataErrorInfo
{
public void CalculateSafetyIssueTotals()
{
if (SafetyIssuesTotals == null)
SafetyIssuesTotals = new SafetyIssuesTotals();
SafetyIssuesTotals.TotalActualSafetySubmissions = SafetyIssues.Count;
SafetyIssuesTotals.TotalIncidents =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 6);
SafetyIssuesTotals.TotalInductions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 2);
SafetyIssuesTotals.TotalRecognitions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 5);
SafetyIssuesTotals.TotalSafetyMeetings =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 3);
SafetyIssuesTotals.TotalSubmissions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 1);
SafetyIssuesTotals.TotalToolboxTalk =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 4);
}
}
partial class SafetyIssue
{
}
partial class SafetyIssueTotals
{
public void RefreshTotals(List<SafetyIssue> safetyIssues)
{
TotalSubmissions = safetyIssues.Count(c => c.SafetyCategory == 1);
TotalInductions = safetyIssues.Count(c => c.SafetyCategory == 2);
TotalSafetyMeetings = safetyIssues.Count(c => c.SafetyCategory == 3);
TotalToolboxTalk = safetyIssues.Count(c => c.SafetyCategory == 4);
TotalRecognitions = safetyIssues.Count(c => c.SafetyCategory == 5);
TotalIncidents = safetyIssues.Count(c => c.SafetyCategory == 6);
ActualSafetySubmissions = safetyIssues.Count(c => c.JobSafetyNo.Trim() != "");
}
}
partial class JobNumber:IDataErrorInfo
{
partial void OnLoaded()
{
CalculateSafetyIssueTotals(); //moved the call to the function here.
}
public void CalculateSafetyIssueTotals()
{
if (SafetyIssuesTotals == null)
SafetyIssuesTotals = new SafetyIssuesTotals();
SafetyIssuesTotals.TotalActualSafetySubmissions = SafetyIssues.Count;
SafetyIssuesTotals.TotalIncidents =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 6);
SafetyIssuesTotals.TotalInductions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 2);
SafetyIssuesTotals.TotalRecognitions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 5);
SafetyIssuesTotals.TotalSafetyMeetings =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 3);
SafetyIssuesTotals.TotalSubmissions =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 1);
SafetyIssuesTotals.TotalToolboxTalk =
SafetyIssues.Count(s => s.SafetyCategory1 != null && s.SafetyCategory1.SafetyCategoryID == 4);
}
}