Я знал, что это проблема, с которой я столкнулся, и я просто не знаю, как ее решить. У меня есть две таблицы со следующими структурами:Ошибка SQL: заявление вставки, связанное с ограничением внешнего ключа
dbo.File
FileID int
Title nvarchar(50)
ISBN nvarchar(50)
UploadDate datetime
UserName nvarchar(50)
dbo.Cover
CoverID int
CoverFileContent varbinary(max)
CoverMimeType nvarchar(50)
CoverFileName nvarchar(50)
FileID int
В таблице файлов имеет один ко многим отношений с таблицей обложки и FILEID в таблице Cover ссылающийся FILEID в таблице файлов.
У меня также есть приложение MVC. В этом приложении, на одном экране вставить данные файла, а затем в следующем окне загрузить файл и вставить его в таблицу обложки, но я получаю следующее сообщение об ошибке:
InnerException {"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_Cover_File\". The conflict occurred in database \"SampleAppDB\", table \"dbo.File\", column 'FileID'.\r\nThe statement has been terminated."} System.Exception {System.Data.SqlClient.SqlException}
Я знаю, что это значит , Я просто забыл, как я на самом деле выполняю эту инструкцию insert, чтобы соответствовать таблице файлов. В настоящее время я не вставляю ничего в внешний ключ FileID в таблице Cover, потому что я не уверен, как это сделать. Вот отрывок из контроллера обложки, где загрузка файла обложки происходит:
[HttpPost]
public ActionResult CreateCover(FormCollection formvalues)
{
Cover cover = new Cover();
cover.CoverMimeType = Request.Files["CoverUpload"].ContentType;
Stream fileStream = Request.Files["CoverUpload"].InputStream;
cover.CoverFileName = Path.GetFileName(Request.Files["CoverUpload"].FileName);
int fileLength = Request.Files["CoverUpload"].ContentLength;
cover.CoverFileContent = new byte[fileLength];
fileStream.Read(cover.CoverFileContent, 0, fileLength);
filerepository.AddCoverData(cover);
filerepository.Save();
return View(cover);
}
любые советы о том, как справиться с этой проблемой было бы весьма признателен, если кто-то нуждается во мне, чтобы отправлять больше информации тоже, просто спросить.
В соответствии с просьбой: filerepository.cs
private SampleAppDBEntities entities = new SampleAppDBEntities();
public void AddCoverData(Cover cover)
{
entities.Covers.AddObject(cover);
}
db-связанный код в определении объекта filerepository. Это linq-to-sql, nhibernate, прямой ado.net, другой? – Tahbaza
@Tahbaza, я обновил свое сообщение с помощью фрагмента от filerepository.cs. Я использую ado.net. – 109221793