Я знал, что это проблема, с которой я столкнусь, и я просто не знаю, как ее решить. У меня есть две таблицы со следующими структурами:
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 в таблице обложек ссылается на FileID в таблице файлов.
Итак, у меня также есть приложение MVC. В этом приложении на одном экране я вставляю Данные файла, затем на следующем экране я загружаю файл и вставляю его в таблицу обложек, однако я получаю следующую ошибку:
InnerException {"оператор INSERT
в конфликте с иностранным ключом
ограничение \ "FK_Cover_File \".
конфликт произошел в базе данных
\ "SampleAppDB \", таблица \ "dbo.File \",
столбец 'FileID'. \ r \ nУправление
было прекращено. "} System.Exception
{System.Data.SqlClient.SqlException}
Я знаю, что это значит, я просто не указал, как на самом деле я выполняю этот оператор вставки, чтобы соответствовать таблице файлов. В настоящее время я не вставляю ничего во внешний ключ 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);
}