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

109*_*793 1 sql database asp.net-mvc file-upload

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

InnerException {"当IDENTITY_INSERT设置为OFF时,无法在表'Cover'中为identity列插入显式值."} 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
Run Code Online (Sandbox Code Playgroud)

在此数据库中,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);
}
Run Code Online (Sandbox Code Playgroud)

封面控制器

//
        //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 });
        }
Run Code Online (Sandbox Code Playgroud)

CreateCover视图

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

我能够上传一次封面,但从那以后我一直在收到这个错误.我注意到在我的表中我忘记将PK列设置为IDENTITY(1,1),但是我改变了这个并且仍然得到错误.

我也不知道是否值得一提,但在我的数据库中我能够上传的一个图像,数据库中的二进制内容几乎是"0x00000 ......"......这似乎不对?:)

任何帮助或建议将不胜感激,谢谢!

109*_*793 5

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