如何更新实体? [英] How to update entity?

查看:143
本文介绍了如何更新实体?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个更详细的问题,我没有回答,我将有一个更简单的方法相同的问题:



我有一个EF数据库与外键到另一张桌子。



我希望更新一个 ENTITY 。但我需要这样做,我会写下面的代码:


  1. 转到数据库,检索会员按ID,返回EF会员对象

  2. 对对象 OUTSIDE 进行一些更改EF上下文

  3. 发送修改 EF成员保存方法

  4. 在BL层保存方法中使用上下文并保存更改。

1)

  MemberManager currentMemberManager = new MemberManager(); 
Member NewMember = currentMemberManager.GetById(2);

2)

 code> NewMember.FirstName =NewFirstName; 
NewMember.LanguageId = 1;

3)

 code> currentMemberManager.Save(NewMember); 

4)

 code> public void Save2(Member newMember)
{
using(var Context = new NoxonEntities())
{
Member existingMember = Context.Member.First(c => c.Id == newMember.Id);
existingMember.FirstName = newMember.FirstName;
existingMember.Language = Context.Language.First(c => c.Id == newMember.LanguageId);
Context.SaveChanges(); //在这里我得到以下错误
}
}




数据库的更改已成功提交,但在更新对象上下文时发生错误
。 ObjectContext可能是
在不一致的状态。内部异常消息:引用
完整性约束违例发生:
定义引用约束的属性值在
主体和关系中的依赖对象之间不一致。



注意:您可以建议发送一个不同的类(例如:public class
MyMember),它具有所有必需的属性,并且完全分开
EF。但是,这需要很多工作才能将所有EF对象转换为
到我的单独的类中。我是对的吗?


我希望有一种方法来分离实体足够长的时间来修改它并保存值进入数据库。 (此外,我尝试了Detach方法,根本不更新任何行)



我一直在努力解决这个问题。



请帮助我更好地了解它,我真的需要一个解决方案。非常感谢任何人如何有一些想法。

解决方案

你可以做一些简单的事情,如分离实体,然后将其附加到你准备保存的上下文?

  MemberManager currentMemberManager = new MemberManager(); 
Member NewMember = currentMemberManager.GetById(2);

获取:

  public Member GetById(int id)
{
var member = YourContext.Members.FirstOrDefault(m => m.id == id);
YourContext.Detach(member);
返回成员;
}

保存:

  public void Save2(Member newMember)
{
using(var Context = new NoxonEntities())
{
Context.Attach新成员);
Context.ObjectStateManager.ChangeObjectState(newMember,EntityState.Modified);
Context.SaveChanges();
}
}


I had a question more detailed earlier which I had no answer, I will have the same question with a simpler way:

I have an EF database with foreign key to another table.

I would like to UPDATE an ENTITY. But I need to this like this and I'll write the codes below:

  1. Go to database and retrieve the Member by id, return EF Member object
  2. Do some changes on the object OUTSIDE the EF Context
  3. Send the MODIFED EF Member into a Save method
  4. In BL layer save method uses the context and save changes.

1)

MemberManager currentMemberManager = new MemberManager();
Member NewMember = currentMemberManager.GetById(2);

2)

NewMember.FirstName = "NewFirstName";
NewMember.LanguageId = 1;

3)

currentMemberManager.Save(NewMember);

4)

public void Save2(Member newMember)
{
    using (var Context = new NoxonEntities())
    {
        Member existingMember = Context.Member.First(c => c.Id == newMember.Id);
        existingMember.FirstName = newMember.FirstName;
        existingMember.Language = Context.Language.First(c => c.Id == newMember.LanguageId);
        Context.SaveChanges();//In here I get the error below
    }
}

The changes to the database were committed successfully, but an error occurred while updating the object context. The ObjectContext might be in an inconsistent state. Inner exception message: A referential integrity constraint violation occurred: The property values that define the referential constraints are not consistent between principal and dependent objects in the relationship.

Note: You may suggest to SEND a different class (Ex: public class MyMember) that has all the necessary properties and totally separated from EF. But this requires much work to get all EF object converting into my separate classes. Am I right?

I am hoping there is a way to Detach the entity just long enough for me to modify it and save the values into database. (Also, I tried the Detach method which updates no rows at all)

I've been trying to solve this for hours now.

Please, help me to understand it better, I really need a solution. Thank you so much to anyone how has some ideas.

解决方案

Could you do something simple like detaching the entity, then attaching it to the context when you're ready to save?

MemberManager currentMemberManager = new MemberManager();
Member NewMember = currentMemberManager.GetById(2);

The get:

public Member GetById(int id)
{ 
  var member = YourContext.Members.FirstOrDefault(m => m.id == id);
  YourContext.Detach(member);
  return member;
}

The save:

public void Save2(Member newMember)
        {
            using (var Context = new NoxonEntities())
            {
                Context.Attach(newMember);
                Context.ObjectStateManager.ChangeObjectState(newMember, EntityState.Modified);
                Context.SaveChanges();
            }
        }

这篇关于如何更新实体?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆