【问题标题】:The relationship between the two objects cannot be defined无法定义两个对象之间的关系
【发布时间】:2013-08-20 08:50:19
【问题描述】:

我想在用户中添加和编辑项目。我使用此代码:

DataContext db = new DataContext();
private void Save()
{
    User user = (SelectedUser == null) ? new User() : db.User.Find(SelectedUser.UserName);
    user.FirstName = FirstName;
    user.CcRowIndex = CcRowIndex;
    user.Image = Image;
    user.LastName = LastName;
    user.OrganizationalPostId = OrganizationalPost;
    user.OrganizationalUnitId = OrganizationalUnit;
    user.Password = Password;
    user.Signature = Signature;
    user.SubsetUsers = SubsetUsersList;
    user.UserName = UserName;
    if (SelectedUser == null)
    {
        db.User.Add(user);
    }

    db.SaveChanges();
}

我添加了项目,但是当我编辑项目时出现错误:

无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象。+ datacontext的savechange

【问题讨论】:

标签: c# wpf entity-framework mvvm


【解决方案1】:

查看User 类的定义会有所帮助,不过,我可以猜测一下。

假设:

  • SubsetUsersList 属性是其他 User 实例的集合

SubsetUsersList 由您的 DbContext 的另一个实例填充。当您尝试在 DbContext 的新实例中使用这些实体时,EF 会报错。

// SubsetUsersList populated by unknown DbContext instance
user.SubsetUsers = SubsetUsersList;

// db instance throws exception
db.SaveChanges();

另一种方法是在当前db 实例中加载这些用户:

// Guessing at the definition of your User class
var subsetUserIds = SubsetUsersList.Select(u => u.UserId).ToArray();
user.SubsetUsers = db.User.Where(u => subsetUserIds.Contains(u.UserId).ToList();

这效率不高,但应该可以帮助您理解这里的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2012-08-30
    相关资源
    最近更新 更多