コードファースト外来キーに問題があります。私は以下のようなProductを持っており、その既存のProductを使って新しいLineItemを作成しようとしています。しかし、私のコンテキストに変更を保存すると、まったく新しい製品が作成されますが、IDが新しいもの(dbの新しいレコード)以外は、もともと使用していたものの複製が作成されます。EFコードファースト外来キー重複データの作成
public void AddItem(Product item) {
// checking item.Id here will return 100
var lineItem = new LineItem
{
CartId = this.Id,
Product = item,
ProductId = item.Id,
Quantity = 1
};
_db.LineItems.Add(lineItem);
_db.SaveChanges();
// checking lineItem.Id here returns 101
// also checking item.Id here now also returns 101
this.LineItems.Add(lineItem);
}
public class LineItem {
[Key]
[Required]
public int Id { get; set; }
[Required]
public int CartId { get; set; }
[Required]
public int ProductId { get; set; }
[Required]
public int Quantity { get; set; }
[ForeignKey("CartId")]
public virtual Cart Cart { get; set; }
[ForeignKey("ProductId")]
public virtual Product Product { get; set; }
}
は、なぜそれが新しい製品を作成している:私は、新しいラインアイテムを追加しているのはここ
ですか?
どこに渡している製品をロードするコードはありますか?私はこの製品のインスタンスがもはや文脈に付随しないことを期待しているので、新しい記録と見なされています。テストとして、新しいLineItemにProduct = nullのままにして、ProductIdを設定します。 –
ああ、それは問題です。私は自分の製品コレクションをキャッシュし、キャッシュされたコレクションの製品を使用していました。あなたが答えを出すなら、あなたを答えとしてマークします。私のキャッシュされたバージョンの製品を使用する方法はありますか? – DennyFerra