繁体   English   中英

插入数据库后更新模型的一些属性

Update few Properties of Model after Inserting in database

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在我的ASP.NET Web forms应用程序中,我有一个ModelID的类型为IDENTITY,类型为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。 创建目录并保存文件后,只有我可以获取要保存的文件路径。

非常感谢您的帮助。 谢谢。

2 个回复

在您的示例中,在设置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();

由TryValidateModel替换TryUpdateModel

public void InsertItem()
    {
        Channel item = null;
        item = new Channel();

        TryUpdateModel(item);

        if (ModelState.IsValid)
        {                
            // Save changes
            _db.Channels.Add(item);
            _db.SaveChanges();
            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;
                    }
                }

                TryValidateModel(item);
                _db.SaveChanges();
            }
            Response.Redirect("Default");
        }
    }

另外一个工作代码示例

[HttpPost]

[ValidateAntiForgeryToken]
public ActionResult Create(Employee employee)
{
    if (ModelState.IsValid)
    {
        db.Employees.Add(employee);
        db.SaveChanges();

        int empId = employee.EmployeeID;
        employee.LName = "abc";
        TryValidateModel(employee);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(employee);
}
2 更新模型的一些属性

我在用户模型中包含的模块中有以下代码: 我不想使用validations: false保存模型validations: false所以我尝试调用update方法,但是它不起作用。 为什么? ...

3 为什么有一些mysql连接在删除+插入后选择mysql数据库中的旧数据?

我的python / wsgi网络应用程序中的会话有问题。 每个2个wsgi守护进程中的每个线程都有一个不同的,持久的mysqldb连接。 有时,在删除旧会话并创建新会话后,某些连接仍然会在select中获取旧会话,这意味着它们无法验证会话并再次请求登录。 详细信息:会话存储在本地my ...

6 将一些数据添加到数据库后,php更新代码非常慢?

我有一个足球梦幻联赛php脚本,有20个团队和分配给这些团队的400多名球员,并且我有500个用户。 每个星期都应该为每个球员分配一个分数,这样最终每个用户将从他的阵型得到一个总积分,这将产生该赛季的排名。 通常会添加第一周点,但是对于第二周点,addpont部分变得如此缓慢,而对于 ...

7 尝试将一些数据插入MySQL数据库

我正在使用php进行项目,并且正在尝试将一些数据插入MySQL数据库。 当我在线运行代码并尝试将数据插入数据库时​​,出现致命错误。 从错误消息中,我认为这可能与数据库使用时间戳记有关。 我试图使用NOW()来插入当前日期和时间,但是它没有用。 如果有人能指出我正确的方向,将不胜感激。 ...

2017-04-12 13:51:53 1 55   php/ mysql
9 Insert语句仅将一些数据插入数据库

我希望我的标题有意义,因为我不知道该怎么说。 我正在使用参数和哈希值登录和注册表单。 我之前使用过参数,但从未在注册表格中使用过。 因此,问题在于,当我成为新用户时,它仅插入密码而不是用户名。 我试图更改用户名的名称,已经检查了与数据库的连接是否正确,而我根本不知道该怎么办。 ...

10 尝试创建数据库和表并插入一些数据

到目前为止,这就是我所拥有的...。我不明白为什么它不起作用? 有任何想法吗? 这只是连接数据库,创建表和插入一些数据的简单脚本。 我也想检索数据,但我想我可能会有点头疼。 ...

2013-02-03 23:09:39 1 94   php
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM