将实体对象从一个entitycollection移动到另一个entitycollection

时间:2011-12-07 08:59:00

标签: c# entity-framework

是否可以将关系从实体转移到另一个实体?

我有一个表用户,其 1 .. * - 与一个名为 Cars 的表相关联。在我的代码的一部分中,我希望用户取代另一部分,即将所有Cars关系移动到新用户。在SQL中,它可以像这样实现,但是可以实现实体框架吗?

UPDATE Cars SET UserId = @newUserId WHERE UserId = @oldUserId

我希望解决方案尽可能通用,以便我可以在需要时重复使用它。你将如何实现这一目标?

下面你会找到我迄今为止尝试过的一些内容。

只需复制

newUser.Cars = oldUser.Cars;
oldUser.Cars = new EntityCollection<Cars>();

删除并插入

public static void MoveFrom<T>(this EntityCollection<T> to,
                               EntityCollection<T> from)
                               where T : class, IEntityWithRelationships
{
  foreach (T item in from.ToArray())
  {
    from.Remove(item);
    to.Add(item);
  }
}

使用CopyTo

public static void MoveFrom<T>(this EntityCollection<T> to,
                               EntityCollection<T> from)
                               where T : class, IEntityWithRelationships
{
  T[] array = new T[from.Count()];
  from.CopyTo(array, 0);

  foreach (T item in array)
  {
    to.Add(item);
  }
}

Copying from EntityCollection to EntityCollection impossible?建议使用最后一个,但会出现以下错误

  

发生了参照完整性约束违规:主键   作为参照完整性约束的一部分的属性不能   除非正在设置,否则在依赖对象未更改时更改   该协会的主要对象。主要对象必须是   跟踪并且没有标记为删除。

0 个答案:

没有答案