【问题标题】:How can I prevent related records being saved with the main record in EF 5 Code First?如何防止相关记录与 EF 5 Code First 中的主记录一起保存?
【发布时间】:2013-04-12 08:43:47
【问题描述】:

我有一堂课:

public class VehicleMovement: IEntityWithId
{
    public int Id { get; set; }
    public string EmpNo { get; set; }
    public DateTime MovementDate { get; set; }
    public DateTime TempMovementTime { get; set; }
    public TimeSpan MovementTime { get; set; }
    public VehicleMovementType MovementType { get; set; }
    public int MovementTypeId { get; set; }
}

然后我有一些 CsvHelper 代码将 CSV 文件映射到这些 VehicleMovement 对象的集合。在映射过程中,我使用查找函数来确定MovementTypeMovementTypeId 的正确值,但是当我尝试使用“旧”VehicleMovementType 保存新的VehicleMovement 时,我在VehicleMovementType 实体。

【问题讨论】:

  • 请在您创建并保存VehicleMovement 对象的位置添加代码。改变某些行的顺序很有可能会奏效。
  • 我不创建对象。 CsvHelper 读取 CSV 文件并返回 IEnunmerable<VehicleMovement>。我只是循环,在DbSet 上调用Add,然后在循环之后,在上下文中调用SaveChanges
  • 这是CsvHelper 有什么可以改变的吗?您可以将原始 FK 属性(如 MovementTypeId)添加到您的类吗?
  • 我知道为什么我描述得很清楚的事情正在发生,并希望自己回答这个问题。我知道答案会在很多情况下都有帮助。
  • @GertArnold 谢谢。我希望我的回答能提供一些价值,也许对问题有一些明确性,并可能对某人有所帮助。嘿,否则我们再次关闭它。

标签: entity-framework ef-code-first entity-framework-5


【解决方案1】:

提示:您不必同时设置 MovementTypeId 和导航属性 (MovementType),只需输入 id(如果实体结构正确连接)。

没有你提供的任何其他信息,

类似的情况可以用例如解决

context.Entry(vehicleMovement.MovementType).State = System.Data.EntityState.Unchanged;  

如果这就是你想要的,我猜。

【讨论】:

    【解决方案2】:

    我使用 VehicleMovementTypeDictionary 根据传入 CSV 文件中的描述来查找我的 VehicleMovementTyoe 对象。我犯了一个错误,即在字典的 thr ctor 中实例化一个新的 DbContext,同时使用原始的 DbContext 来处理翻译的 CSV 记录。

    我更改了字典的代码以使用与我的主要导入例程相同的上下文,即

    public MovementTypeDictionary(ParkPayDbContext dbContext)
    {
        foreach (var movementType in dbContext.VehicleMovementTypes)
        {
            Add(movementType.Description, movementType);
        }
    }
    

    稍后在主代码中,我传入了共享的 DbContect 并解决了所有问题:

    VehicleMovementReadMap.MovementTypes = new MovementTypeDictionary(_dbContext);
    

    请记住,从不同上下文加载的对象不会被跟踪,当您将它们添加到第一个上下文时,它们会显示为新的且未附加,并且可以插入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2014-06-07
      相关资源
      最近更新 更多