-1

我有一堂课:

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对象的集合。MovementType在映射过程中,我使用查找函数来确定and的正确值MovementTypeId,但是当我尝试VehicleMovement使用 'old'保存新的 时,我在实体VehicleMovementType上得到一个重复的键异常。VehicleMovementType

4

2 回答 2

0

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

并且缺少您提供的任何其他信息,

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

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

如果那是你想要的,我猜。

于 2013-04-12T13:45:23.383 回答
0

我使用 a根据传入的 CSV 文件中的描述VehicleMovementTypeDictionary来查找我的对象。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);

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

于 2013-04-19T04:55:22.647 回答