Sql / c # Ошибка: невозможно вставить явное значение для столбца идентификаторов, если для параметра IDENTITY_INSERT установлено значение off - PullRequest
1 голос
/ 08 ноября 2010

У меня есть веб-приложение, которое дает мне следующее исключение:

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 ...." ... Это кажется неправильным ? :)

Буду признателен за любую помощь или совет, спасибо!

1 Ответ

5 голосов
/ 08 ноября 2010

Решил эту проблему для всех, у кого такая же проблема. Просто обновил модель в Visual Studio, и, похоже, все получилось.

...