2

我首先在 Web 项目中使用 EF 5.0,DB。

对于我们的服务层,我们使用 Agatha 和 AutoMapper,因此所有数据都作为 POCO 对象到达服务层。

我有一个如下所示的数据结构:

public class FirstClass
{
    public int Id { get; set; }

    public int? SelectedSecondClassId { get; set; }
    public SecondClass SelectedSecondClass { get; set; }

    public ICollection<SecondClass> MySecondClasses { get; set; } 

    //other properties go here
}

public class SecondClass
{
    public int Id { get; set; }

    public int ParentSecondClassId { get; set }
    public SecondClass ParentSecondClass { get; set; }

    //other properties go here
}

现在想象一下,我尝试更新一个 FirstClass 对象并在 1 中执行以下操作:

  • 在 MySecondClasses 集合中创建 2 个新的 Secondclass 对象(都具有 id 0)
  • 将这些新创建的对象之一设置为 SelectedSecondClass

然后EF拒绝打球。我无法让它工作。如果我查看 changetracker,我看到实体上的 SelectedSecondClass 再次为空,但 SelectedSecondClassId 设置为 0。这是他无法解决的问题,因为在正确创建之前有 2 个 Id 为 0 的对象.

如果我这样做,我可以解决问题:

var newId = -1;
foreach (var newSecondClass in firstClass.MySecondClasses.Where(x => x.Id <= 0))
{
    newSecondClass.Id = newId;
    newId --;
}

if (firstClass.SelectedSecondClass != null) 
{ 
    firstClass.SelectedSecondClassId = firstClass.SelectedSecondClass.Id;
}

// Send the updates to EF

如您所知,我觉得这有点被破解了,其他开发人员很容易忘记这样的事情。我希望有更好的方法来做到这一点。最好以一种我可以在我的 DbContext 包装器中的 SaveChanges() 之前“修复”这种情况的方式。

谁能指出我正确的方向?

4

0 回答 0