问一个ef一对多更新的问题

imegg 2015-03-06 11:50:23
ef的Code First模式
现在有两个表,表A和表B...表A和表B是一对多的关系
class A{
......
public ICollection<B> B{set;get;}
......
}
class B{
......
public int AID{set;get;}
public A A{set;get;}
......
}
在mvc中分别有对应的DTO,利用Automapper将Dto转成实体A再保存时出现以下异常
Mapper.Map(DtoA,A);
Mapper.Map(DtoA.B,A.B);
Update(A);
---------------------------------
操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。对关系作出更改后,会将相关的外键属性设置为 null 值。如果外键不支持 null 值,则必须定义新的关系,必须向外键属性分配另一个非 null 值,或必须删除无关的对象。
-----------------------------------
检查了一下代码,并无调整或者删除关系的行为,外键值也是对的,所有的Hashcode和从数据库中获取出来的实体的Hashcode都是一样的,这代表和map出来的对象是同一个实体,可以表明此实体已存在于数据上下文之中
直接利用ef从数据库中获取数据再进行赋值修改操作是正常的...
于是按提示将AID改成可空的int?类型,然后再执行更新操作,现在是正常了,但观察数据库发现,它是将旧的记录的AID设为了NULL,然后再添加了一条新的记录?

还有一种情况也会出现这个问题,就是从数据库中获取到要修改的记录A之后,重新new一个List<B>给它,然后也会报相同的错误

请问有谁碰到过这种问题?
...全文
229 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

17,747

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧