我在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
请帮帮我......
答案 0 :(得分:0)
在File
循环的每次迭代中创建一个新的foreach
:
for (int i = 0; i < fileCollection.Count; i++)
{
File myFile = new File();
HttpPostedFile uploadfile = fileCollection[i];
...