Я изучаю LINQ, и у меня возникают проблемы со вставкой и обновлением за один раз. У меня есть таблица StatusReport (School, Customer, Time), где School является первичным ключом, и таблица Service (School, ServiceName, State и Version), где School является внешним ключом, а School + ServiceName является первичным ключом. .
Вот мой код обновления:
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); возвращает ноль, даже если данные есть.
Есть идеи?