我在学习LINQ,并且在插入和更新时遇到问题。我有一个StatusReport表(学校,客户,时间),学校是主键,服务表(学校,服务名称,州和版本),学校是外键,School + ServiceName是主键。使用Linq-to-SQL +子关系更新/插入的问题
这里是我的更新代码:
public MockReport(int numDrives, int numServers, int numCameras, string customer, string school)
{
_school = school;
string c = "...";
using (DataClasses1DataContext _context = new DataClasses1DataContext(c))
{
_context.CommandTimeout = 60;
Random random = new Random();
bool inserting = false;
_report = _context.StatusReports.SingleOrDefault(s => s.School == school);
if (_report == null)
{
_report = new StatusReport();
inserting = true;
}
updateService("System Monitor", "Running", "1.0.0.0");
_report.Customer = customer;
_report.School = school;
_report.Time = DateTime.Now;
if (inserting)
{
_context.StatusReports.InsertOnSubmit(_report);
}
_context.SubmitChanges();
}
}
private void updateService(string serviceName, string state, string version)
{
Service service = _report.Services.SingleOrDefault(s => s.School == _school && s.ServiceName == serviceName); // returns null!
bool inserting = false;
if(service == null)
{
service = new Service();
inserting = true;
}
service.ServiceName = serviceName;
service.State = state;
service.Version = version;
if(inserting)
{
_report.Services.Add(service);
}
}
插入是好的,但更新失败 - 我得到一个SQL异常:PRIMARY KEY约束“PK_dbo.Service”的相关规定。无法在对象'dbo.Service'中插入重复键。 该声明已被终止。
另外,Service service = _report.Services.SingleOrDefault(s => s.School == _school & & s.ServiceName == serviceName);即使数据存在,也会返回null。
任何想法?
我认为SingleOrDefault()会检索数据库中的对象。然后,我更改该对象,并调用SubmitChanges()将更改提交给该对象。 – 2010-02-24 19:42:22
SingleOrDefault将从集合中获取一个项目,如果集合为null,则返回null。 – 2010-02-24 20:02:03
SingleOrDefault总是在空集合上引发异常。当Func <>返回true时,重载SingleOrDefault(Func <>)将从集合中检索单个项目;如果未找到此类项目,则为null。 – 2010-11-25 04:46:31