EF数据存贮问题二之“无法定义这两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象”...

“无法定义这两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象”,这是在EF中,一对多关系表,有外键的类保存至数据库中出现的错误。

我原来是用JAVA开发的,习惯性的处理一对多中类与类的关系,在C#里也是这样处理的。下面是个简单的一对多关系C#里的实现(先数据库,后VS生成代码):

public class ObjectA{
   public int ID{set;get;}  
   public int objectbid{set;get;}//数据库生成
   public ObjectB B{set;get;}//VS自动实现
}
public class ObjectB[
  public int ID{set;get;}  
  //这可能还有个ObjectA的集合
}

在业务逻辑里,习惯性的查找到一个ObjectB,然后用下面的形式赋值:

public class FormNew:Form{
    //……省略其它代码
    public void Button1_Click(object sender, EventArgs e){
        ObjectB b = XXB();//通过其它方法查询
        ObjectA a = new ObjectA();
        a.B = b;
        XXA.Save(a);//用DBContext保存a,这时就会报上面的异常!!!
    }
}

在网上查询,解释大概就是之前调用XXB方法的DBContext与XXA.Save()里的DBContext不一致。具体原理我也不懂(新手),让我很不能理解的是,这个类里存贮了ID,应该是一致的,怎么就不让存呢!!
但也得想办法解决这个问题。经过本人测试,不用上面这种关系对应形式,而用下面的方法可以解决:

public class FormNew:Form{
    //……省略其它代码
    public void Button1_Click(object sender, EventArgs e){
        ObjectB b = XXXXX();//通过其它方法查询
        ObjectA a = new ObjectA();
        a.objectbid = b.id;//这里只调整数据库中设置外键的字段值,不维护关系
        XXXXX.Save(a);//用DBContext保存a,这时再维护关系
    }
}
public class XXXXX{
    public void Save(ObjectA a){
         DBContext db = new DBContext();//此处为假想,通过方法获得DBConText
         ObjectB b = db.objectB.where("...");//用DBConText查询B
         a.b = b;//这时赋值就没问题了,查询ObjectB用的DBContext和保存ObjectA用的DBConText是同一个。
      db.objecta.AddObject(a);
    }
  
}


不知道我说清自己的想法没。留下个纪念,以后出问题了,再看看。

转载于:https://www.cnblogs.com/aocshallo/p/4451081.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值