-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; }
}

VehicleMovement次に、CSV ファイルをこれらのオブジェクトのコレクションにマップする CsvHelper コードがあります。MovementTypeマッピング中にルックアップ関数を使用してとの正しい値を決定しますが、 newを 'old' でMovementTypeId保存しようとすると、エンティティで重複キーの例外が発生します。VehicleMovementVehicleMovementTypeVehicleMovementType

4

2 に答える 2

0

MovementTypeIdヒント:とナビゲーション プロパティ ( ) の両方を設定する必要はありません。ID をMovementType入力するだけです (エンティティ構造が正しく配線されている場合)。

そして、あなたからの他の情報がなければ、

同様の状況は、例えばで解決できます

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

それがあなたが望むものなら、私は推測します。

于 2013-04-12T13:45:23.383 に答える
0

を使用して、受信した CSV ファイルの説明に基づいVehicleMovementTypeDictionaryてオブジェクトを検索していました。VehicleMovementTyoe元の DbContext を使用して翻訳された CSV レコードを処理しているときに、辞書の thrctor で新しい DbContext をインスタンス化するという間違いを犯しました。

メインのインポート ルーチンと同じコンテキストを使用するようにディクショナリのコードを変更しました。

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 に答える