“无法定义这两个对象之间的关系,因为它们附加到不同的 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);
} }

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

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

  1. python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系

    https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...

  2. 《图解HTTP》读书笔记(二:各种协议与HTTP协议之间的关系)

    涉及到DNS协议.TCP协议.IP协议,话不多说,上图:

  3. EF架构~基于EF数据层的实现

    回到目录 之前写过关于实现一个完整的EF架构的文章,文章的阅读量也是满大的,自己很欣慰,但是,那篇文章是我2011年写的,所以,技术有些不成熟,所以今天把我的2014年写的EF底层架构公开一下,这个架 ...

  4. EntityFrameWork简单操作 EF数据上下文对象操作数据增删改差及批处理

    /// <summary> /// EF针对 留言数据库 的 数据上下文对象!!!! /// </summary> static LeaveWordBoradEntities ...

  5. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

  6. Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印

    1. 读取 //读取excel指定sheet中的各行数据,存入二维数组,包括首行 public static String[][] getSheetData(XSSFSheet sheet) thro ...

  7. MVC-Model数据注解(二)-自定义

    由于系统的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解.         自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也 ...

  8. asp.net mvc3 数据验证(二)——错误信息的自定义及其本地化

    原文:asp.net mvc3 数据验证(二)--错误信息的自定义及其本地化 一.自定义错误信息         在上一篇文章中所做的验证,在界面上提示的信息都是系统自带的,有些读起来比较生硬.比如: ...

  9. 9.10 翻译系列:EF数据注解特性之StringLength【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/stringlength-dataannotations-attribute-in-co ...

随机推荐

  1. .net ADF 中 Ajax 的调用过程.

    图示是 .net ADF Ajax调用过程的简略过程: 1,2)当页面初始化之后, 浏览器一旦触发回调事件, 脚本函数负责处理回调信息, 并调用 ASP.NET 2.0/3.5 中的 WebForm_ ...

  2. (原)python使用ctypes调用C/C++接口

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6135514.html 参考网址: https://docs.python.org/2/library/ ...

  3. [目录][Leetcode] Leetcode 题解索引

    之前想边做题边写结题报告,发现有点力不从心,而且很多地方也是一知半解,现在重新做题,重新理解.这篇文章主要起一个目录的作用. 目前没有什么特定的顺序,基本都是看心情翻牌的,哈哈~ 我在Github上新 ...

  4. [转]Mac App distribution in App Store

    Mac程序的大包上传和iOS的有些许不同,因为Mac app既可以上传到store,也可以不通过store供人下载.因此,code sign和provision要根据情况(开发,release< ...

  5. 阿里大鱼simplexmlelement object 取值PHP

    SimpleXMLElement Object(    [code] => 15    [msg] => Remote service error    [sub_code] => ...

  6. (翻译玩)在使用flask-script的应用上使用gunicorn

    在使用flask-script的应用上使用gunicorn 两周前,我强烈的想要学习一点新知识,像新的语言,新的框架之类的!好让我的大脑忙碌起来,寻找了一些日子后,我决定学习现在越来越流行的云应用平台 ...

  7. 使用laravel的任务调度(定时执行任务)

    laravel中有一个很强大上的功能,只需要在服务器上添加一个cron条目,就可以定时执行所有的laravel任务. 现在有如下数据表: 我想让cron表中的cron字段的值每分钟增加1,那么我需要如 ...

  8. SDWebImage 官方文档

    API documentation is available at CocoaDocs - SDWebImage Using UIImageView+WebCache category with UI ...

  9. 在 Windows 下部署 Go 语言环境

    http://bbs.chinaunix.net/thread-4088281-1-1.html 1. 首先下载官方二进制安装包:32 位选择 windows-386.msi64 位选择 window ...

  10. win7系统64位"禁用驱动程序签名强制"如何设置?

    换了Win7系统64位旗舰版的朋友是不是都发现了一点,以前32位Win7系统用的好好的小程序小应用,一下子就装不上了.这是由于Win7系统64位系统对于未有认证签名的驱动程序进行了限制安装,而大部分小 ...