如何使用linq2sql将记录插入到具有多个文件的多个表中

时间:2013-12-17 12:56:48

标签: linq-to-sql asp.net-3.5

我在asp.net 3.5中有web应用程序。我只想将记录添加到3个表中,并且一个表包含与表主键值相关联的多个文件详细信息。

有关详细信息,请添加以下代码:

protected void submit_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            int user_id = 0;
            var query = from u in db.Users
                        where u.Username == (String)Session["Username"]
                        select new
                        {
                            Id = u.Id
                        };
            foreach (var item in query)
            {
                if (item != null)
                {
                    user_id = int.Parse(item.Id.ToString());
                    break;
                }
            }
            Post myPost = new Post();
            myPost.Title = txt_ComName.Text.Trim();
            myPost.Category_id = int.Parse(DDL_Categorynames.SelectedItem
                                .Value.ToString());
            myPost.Description = txt_ComName1.Text.Trim();
            myPost.User_id = user_id;
            myPost.ToUser_id = user_id;
            if(file_upload.HasFile)
            {
                myPost.IsFileAttached = true;
            }
            else
            {
                myPost.IsFileAttached = false;
            }
            db.Posts.InsertOnSubmit(myPost);
            db.SubmitChanges();
            int newId = myPost.Id;
            Flag myFlag = new Flag();
            myFlag.IsRead = false;
            myFlag.IsImportant = false;
            myFlag.IsRemoved = false;
            myFlag.User_id = user_id;
            myFlag.Post_History_id = newId;
            db.Flags.InsertOnSubmit(myFlag);
            db.SubmitChanges();
            File myFile = new File();
            HttpFileCollection fileCollection = Request.Files;
            for (int i = 0; i < fileCollection.Count; i++)
            {
                HttpPostedFile uploadfile = fileCollection[i];
                string fileName = Path.GetFileName(uploadfile.FileName);
                string fileType = System.IO.Path.GetExtension(fileName)
                                 .ToString().ToLower();
                myFile.Post_History_id = newId;
                myFile.File_name = fileName;
                myFile.File_ext = fileType;
                myFile.File_Size = uploadfile.ContentLength.ToString();
                if (uploadfile.ContentLength > 0)
                {
                    uploadfile.SaveAs(Server.MapPath("~/PostFiles/")
                                                           + fileName);
                    db.Files.InsertOnSubmit(myFile);
                    db.SubmitChanges();
                }
            }
            Panel_AddNew.Visible = false;
            Panel_ViewPostList.Visible = true;
            this.FillGrid();
        }
    }
}

但是,在这种情况下,选择了第一个已插入的文件,在第二个文件重复之后,发生了错误,如:

  

无法添加已存在的实体。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.InvalidOperationException:无法添加已存在的实体。

     

来源错误:

     

第248行:{
  第249行:uploadfile.SaveAs(Server.MapPath(“〜/ PostFiles /”)+ FileName);
  第250行:db.Files.InsertOnSubmit(myFile);
  第251行:db.SubmitChanges();
  第252行:}

     

源文件:f:\ EasyWeb \ EndUser \ Post_History.aspx.cs行:250

请帮帮我......

1 个答案:

答案 0 :(得分:0)

File循环的每次迭代中创建一个新的foreach

for (int i = 0; i < fileCollection.Count; i++)
{
    File myFile = new File();
    HttpPostedFile uploadfile = fileCollection[i];
    ...
相关问题