저는 LINQ를 배우고 있으며 한 번에 삽입하고 업데이트하는 데 문제가 있습니다. 나는 School이 기본 키인 StatusReport 테이블 (School, Customer, Time)과 School이 외래 키이고 School + ServiceName이 기본 키인 Service 테이블 (School, ServiceName, State 및 Version)을 가지고있다. . PRIMARY KEY 제약 조건 'PK_dbo.Service'의 위반 : - 나는 SQL 예외를 얻을Linq-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);
}
}
삽입은 괜찮지 만 업데이트가 실패
여기 내 업데이트 코드입니다. 'dbo.Service'개체에 중복 키를 삽입 할 수 없습니다. 명세서가 종료되었습니다.
또한 서비스 서비스 = _report.Services.SingleOrDefault (s => s.School == _school & & s.ServiceName == serviceName); 데이터가 있어도 null을 반환합니다.
아이디어가 있으십니까?
나는 SingleOrDefault()가 데이터베이스에서 객체를 검색한다고 생각했습니다. 그런 다음 해당 객체를 변경하고 SubmitChanges()를 호출하여 해당 객체에 대한 변경 사항을 커밋합니다. –
SingleOrDefault는 컬렉션에서 하나의 항목을 가져오고 컬렉션이 null이면 null을 반환합니다. –
SingleOrDefault는 항상 null 컬렉션에서 예외를 throw합니다. 오버로드 SingleOrDefault (Func <>)는 Func <>이 true를 반환하면 컬렉션에서 단일 항목을 검색하고 해당 항목이없는 경우 null을 반환합니다. –