在我ASP.NET Web forms
的应用程序,我有一个Model
它ID
的类型为int的身份类型。在我的中Insert
,保存项目后,我创建该itemId的目录,并希望在其中保存图像并更新该项目中相同图像的路径。在更新项目属性并尝试保存时,它给我一个错误:-
The property 'ChannelId' is part of the object's key information and cannot be modified.
我的插入方法:
public void InsertItem()
{
Channel item = null;
item = new Channel();
TryUpdateModel(item);
if (ModelState.IsValid)
{
// Save changes
// After this line only I can get the ID created by DB
_db.SaveChanges();
_db.Channels.Add(item);
System.Diagnostics.Debug.WriteLine("### EF ID OF Newly Created CHANNEL = " + item.ChannelId);
// Create Folder for the Channel based on its ID
string pathToCreate = "~/CRMImages/Channels/" + item.ChannelId;
string myFileName = "";
if (!Directory.Exists(Server.MapPath(pathToCreate)))
{
DirectoryInfo di = Directory.CreateDirectory(Server.MapPath(pathToCreate));
var user = System.Security.Principal.WindowsIdentity.GetCurrent().User;
var userName = user.Translate(typeof(System.Security.Principal.NTAccount));
System.Security.AccessControl.DirectorySecurity sec = di.GetAccessControl();
sec.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(userName,
System.Security.AccessControl.FileSystemRights.Modify,
System.Security.AccessControl.AccessControlType.Allow));
di.SetAccessControl(sec);
System.Diagnostics.Debug.WriteLine("CHannel FOLDER CREATED PATH : " + di.FullName);
myFileName = pathToCreate + "/pancardImg.png";
System.Diagnostics.Debug.WriteLine("PATH To Save PAN File & NAME : " + myFileName);
// PAN CARD IMAGE
FileUpload panInsertUpload = InsertChannelId.FindControl("panInsertUpload") as FileUpload;
if (panInsertUpload != null)
{
if (panInsertUpload.HasFile)
{
System.Diagnostics.Debug.WriteLine("EDIT UNIT PLAN FILE NAME =" + panInsertUpload.FileName);
myFileName = pathToCreate + "/pancardImg.png";
panInsertUpload.SaveAs(Server.MapPath(myFileName));
item.PanImageURL = myFileName;
}
}
TryUpdateModel(item);
// HERE I GET THE ERROR. HOW TO UPDATE THAT ITEM IN DB
_db.SaveChanges();
}
Response.Redirect("Default");
}
}
正在创建目录,正在正确保存文件,以及如何将属性更新到DB。创建目录并保存文件后,只有我可以获取要保存的文件路径。
任何帮助都将受到高度赞赏。谢谢。
在您的示例中,设置item.PanImageUrl之后,无需使用TryUpdateModel。在此处删除具有TryUpdateModel的部分。
//TryUpdateModel(item);
// HERE I GET THE ERROR. HOW TO UPDATE THAT ITEM IN DB
_db.SaveChanges();
另外我还注意到您在将SaveChanges添加到集合之前正在调用SaveChanges。我认为应该是相反的方式。
// Save changes
// After this line only I can get the ID created by DB
_db.Channels.Add(item);
_db.SaveChanges();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句