Sql / c#错误:当IDENTITY_INSERT设置为off时,无法为identity列插入显式值

时间:2010-11-08 09:10:22

标签: sql asp.net-mvc database file-upload

我有一个Web应用程序,它给了我以下例外:

  

InnerException {“无法插入   。中标识列的显式值   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

在此数据库中,File表与Cover和Pdf表具有一对多的关系。在我的应用程序中,用户首先输入文件的描述,然后更新文件表,然后他们上传与更新Cover表的文件相关联的图片,然后他们上传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 个答案:

答案 0 :(得分:5)

为遇到同样问题的其他人解决了这个问题。只需在Visual Studio中刷新模型,它似乎已经完成了这个技巧。