У меня есть веб-приложение, которое дает мне следующее исключение:
InnerException {"Невозможно вставить
явное значение для столбца идентичности в
таблица «Cover», когда IDENTITY_INSERT
установить на OFF. "} System.Exception
{System.Data.SqlClient.SqlException}
Я пытаюсь вставить в базу данных, которая выглядит следующим образом:
dbo.File
FileID int PK
Title nvarchar(50)
ISBN nvarchar(50)
UploadDate datetime
UserName nvarchar(50)
dbo.Cover
CoverID int PK
CoverFileContent varbinary(max)
CoverMimeType nvarchar(50)
CoverFileName nvarchar(50)
FileID int FK
dbo.Cover
CoverID int PK
CoverFileContent varbinary(max)
CoverMimeType nvarchar(50)
CoverFileName nvarchar(50)
FileID int FK
В этой базе данных таблица файлов имеет отношение один ко многим как с обложкой, так и с таблицей PDF. В моем приложении пользователь сначала вводит описание файла, и это обновляет таблицу файлов, затем они загружают картинку, связанную с файлом, который обновляет таблицу обложек, и затем они загружают файл PDF (я не получил это далеко еще).
Прямо сейчас мой код MVC c # выглядит следующим образом:
FileController
//
//GET: /File/CreateFile
public ActionResult CreateFile()
{
File file = new File();
return View(file);
}
//
//POST: /File/CreateFile
[HttpPost]
public ActionResult CreateFile(FormCollection formvalues)
{
File file = new File();
if (TryUpdateModel(file))
{
filerepository.AddFileData(file);
filerepository.Save();
return RedirectToAction("CreateCover", "Cover", new { id = file.FileID });
}
return View(file);
}
Крышка контроллера
//
//GET: /File/CreateCover
public ActionResult CreateCover(int id)
{
Cover cover = new Cover();
cover.FileID = id;
return View(cover);
}
//
//POST: /File/CreateCover
[HttpPost]
public ActionResult CreateCover(Cover 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);
cover.FileID = int.Parse(Request.Form["FileID"]);
filerepository.AddCoverData(cover);
filerepository.Save();
return View(cover);
//return View("CreatePdf", "Pdf", new { id = cover.FileID });
}
CreateCover View
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SampleApp.Models.Cover>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
CreateCover
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent"
runat="server">
<h2>CreateCover</h2>
<% using (Html.BeginForm("CreateCover", "Cover", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ %>
<%: Html.HiddenFor(model => model.FileID) %>
<asp:Label ID="Label2" runat="server" Text="Please Select your eBook Cover" /><br />
<input type="file" name="CoverUpload" /><br />
<input type="submit" name="submit" id="Submit" value="Upload" />
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
Мне удалось загрузить обложку один раз, но с тех пор я получаю эту ошибку. Я заметил, что в своей таблице я забыл установить столбец PK как IDENTITY (1, 1), однако я изменил это и все еще получаю ошибку.
Я также не знаю, стоит ли упоминать, но в моей базе данных для одного изображения, которое я смог загрузить, двоичное содержимое в базе данных в значительной степени равно "0x00000 ...." ... Это кажется неправильным ? :)
Буду признателен за любую помощь или совет, спасибо!