日期:2014-05-20  浏览次数:21070 次

求解:新增一个对象时,出现System.NotSupportedException:
我有一个User类,上有一个Department属性,这是另一个类Department的实例。如:user.Department。这个属性是延迟加载的,但是现在增加User对象时,却有错误:

引发异常: System.NotSupportedException: 已尝试 Attach 或 Add 实体,该实体不是新实体,可能是从其他 DataContext 中加载来的。不支持这种操作。。

代码如下:
User user=new User();
user.Name="Test";
user.Department=GetDepartment("软件部");
AddUser(user);

private void AddUser(User user)
{
  DataContext datacontext=new DataContext();
  datacontext.User.InsertOnSubmit(user); //此行出错
  datacontext.SubmitChanges();
}
private Department GetDepartment(string name)
{
  DataContext datacontext=new DataContext();
  return datacontext.Departments.Single(d=>d.Name=name);
}

请大家帮我看看,在google 上看了很久,没太搞明白。

------解决方案--------------------
User有外键关联吗?

http://kb.cnblogs.com/a/1652961/

看看有没有帮助。
------解决方案--------------------
private Department GetDepartment(string name)
{
DataContext datacontext=new DataContext();
return datacontext.Departments.SingleOrDefault(d=>d.Name==name);
}

从你的代码来看 外键要设置允许为空
------解决方案--------------------
private Department GetDepartment(string name)
{
DataContext datacontext=new DataContext();
return datacontext.Departments.Single(d=>d.Name=name);
}

上面是你的GetDepartment方法,首先这里的Single(d=>d.Name=name);要改成==,还有应该改用
SingleOrDefault(d=>d.Name==name)函数;如果用Single,则当实体不存在是会引发异常,用SingleOrDefault则不会,查询不到实体时,它会返回null,

private void AddUser(User user)
{
DataContext datacontext=new DataContext();
datacontext.User.InsertOnSubmit(user); //此行出错
以上这行改成这样看下可以没:
datacontext.User.AddObject(user);

datacontext.SubmitChanges();
}

------解决方案--------------------
错误提示 可能原因是 你声明了 DataContext datacontext=new DataContext(); 好几次。
在 提交的时候AddUser 方法里,datacontext 没有跟踪到 
user.Department=GetDepartment("软件部"); 
所以 插入时,它会 同时插入 user 和Department 两个实体,而不是user 一个。

方法1: 用一个公共DataContext 。

方法2: 显示 跟踪user.Department,告知 DataContext中 user.Department已存在。
 
C# code

private void AddUser(User user)
{
  DataContext datacontext=new DataContext();
  datacontext.Department.Attach(user.Department);
  datacontext.User.InsertOnSubmit(user); //此行出错
  datacontext.SubmitChanges();
}

------解决方案--------------------
怎么图片不见了,就是这两个引用:
System.Data.Entity.Design
System.Data.Entity