C# EF6 更新对象

原文链接:https://my.oschina.net/RainyZou/blog/600812

    该文件主要是在记录C#过程中级联更新问题。该问题主要是在对数据库中的对象中的关联进行更新,导致出现了极大的性能问题,希望有这方面的专家能给出建设性的意见和方向。

class Student
{
     int id;
     string name;
     
     ICollection<Course> Courses;
 }
 class Course
 {
     int id;
     int studentId;
 }

如果我需要更新 Student 类的courses 列表时, 首先清除或者移除列表中的数据,然后添加并更新。

stu.ClassName.Clear();

结果出现异常错误 163142_veGl_867247.png

 其实就是不能通过此种方法删除一对多的关系。于是就老实的 通过 context 去删除。

context.Courses.RemoveRange(stu.Courses);

通过此种方法确实达到了目的,删除了数据,但是测试,发现1000 多条的数据,竟然发现耗费了大量的时间。我的情况比较复杂,原来只用了 5 mins, 结果这么已处理时间达到了40 mins以上。我直接无语。。。(个人认为耗时主要集中在更新对象上),所以我只能另寻他法:多遍历一次,然后通过SQL处理删除,然后重新加载改EF Model.

context.Database.ExecuteSqlCommand("delete from course where studentid="+id);(注意通过Sql操作并不会更新模型,当执行Model 和 SQL 混合使用时,将导致模型保存时出现错误。

通过上面确实能够解决了效率问题,但是已经失去了OOP思想,我觉得只是一种临时的方案。 希望有人能够提出一种能加合理的方案。

转载于:https://my.oschina.net/RainyZou/blog/600812

展开阅读全文
博主设置当前文章不允许评论。

EF6如何写update方法

04-15

[code=csharp]rnpublic void UpdateWithLog(T entity, Guid creatorGuid)rn rn dbContext.Entry(entity).State = EntityState.Modified;rn //dbContext.Set().Attach(entity);rn //dbContext.Entry(entity).State = EntityState.Modified;rn dbContext.Set().Add(GetModelLog(entity, creatorGuid, "Update"));rn rn[/code]rnrnrn如上方法报错:rnrn rn [img=https://img-bbs.csdn.net/upload/201404/15/1397529363_455600.jpg][/img]rn rn具体操作过程:rnFind----序列化-----反序列化-----修改model值----updatern rn求助,该如何写EF的Update方法。rnrnrnrn补充:rn[code=csharp]rn protected void Page_Load(object sender, EventArgs e)rn rn if (!IsPostBack)rn rn if (!string.IsNullOrEmpty(Request.QueryString["userid"]) && CheckValue.IsInteger(Request.QueryString["userid"]))rn rn LoadInfo();rn rn elsern rn this.btnSave.Enabled = false;rn rn rn rnrn protected void btnSave_Click(object sender, EventArgs e)rn rn BLL.UserService bll = new BLL.UserService();rn Model.User model = (Model.User)ViewState["model"];rn //Model.User model = bll.GetById(int.Parse(Request.QueryString["userid"]));rn model.OrganizationID = int.Parse(this.OrganizationList.SelectedValue);rn bll.UpdateWithLog(model);rn ShowMsgHelper.ShowScript("art.dialog(title: \"恭喜,操作成功\", content: \"恭喜,操作成功,用户信息已成功更新!\", ok:function() art.dialog.close(); art.dialog.opener.ListGrid(); );");rn rnrnrn private void LoadInfo()rn rn BLL.UserService bll = new BLL.UserService();rn BLL.UserTypeService usertype = new BLL.UserTypeService();rn BLL.OrganizationService org = new BLL.OrganizationService();rn Model.User model = bll.GetById(int.Parse(Request.QueryString["userid"]));rnrn CSS = model.Sex ? "man" : "woman";rn OfficeID = model.OfficeID;rn this.ltlUserName.Text = model.UserName;rn this.ltlRealName.Text = model.RealName;rn this.ltlUserType.Text = usertype.GetById(model.UserTypeID).UserTypeName;rn this.ltlOrganizationName.Text = org.GetOrganizationFullName(model.OrganizationID);rn ViewState["model"] = model;rnrn this.OrganizationList.SelectedValue = model.OrganizationID.ToString();rn rnrnrn[/code]rnrn使用viewstate后就出该问题,如果不使用viewstate 而是在此getbyid就无问题。 求解。 论坛

没有更多推荐了,返回首页