0
からの例外私は、データベース内の情報を更新するには、このコントローラーを持っている:同じタイプの別のエンティティがすでに同じプライマリキー値を持つため、タイプのエンティティをアタッチできませんでした。 Entity Frameworkの
とこのリポジトリクラスからエントリーを更新するには:
public void UpdateOwner(Owner item)
{
db.Entry(item).State = EntityState.Modified;
Save();
}
はidで車をゲット:
public Car GetCar(int id)
{
return db.Cars.Include(p => p.Owners).FirstOrDefault(x => x.CarId == id);
}
を
車種:
public class Car
{
[HiddenInput(DisplayValue = false)]
public int CarId { get; set; }
[Required]
[Display(Name = "Car model")]
public string Model { get; set; }
[Required]
[Display(Name = "Car mk.")]
public string Mk { get; set; }
[Required]
[Display(Name = "Car price")]
[DataType(DataType.Currency)]
public double Price { get; set; }
[Required]
[Display(Name = "Release Date")]
public int ReleaseDate { get; set; }
[Required]
[Display(Name = "Car type")]
public CarType Type { get; set; }
[HiddenInput(DisplayValue = false)]
public List<Owner> Owners { get; }
public Car()
{
Owners = new List<Owner>();
}
}
所有者モデル:
public class Owner
{
[HiddenInput(DisplayValue = false)]
public int OwnerId { get; set; }
[Required]
[Display(Name = "Client name")]
public string Name { get; set; }
[Required]
[Display(Name = "Client surname")]
public string Surname { get; set; }
[Required]
[Display(Name = "Client birthday")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime Birthday { get; set; }
[Required]
[Display(Name = "Client experience(in years)")]
public int? ExperienceInYears { get; set; }
[Display(Name = "Select car")]
public List<Car> Cars { get; set; }
public Owner()
{
Cars = new List<Car>();
}
}
私の問題は、EFのこの例外です:
誰が助けることはできますか?私はそれを解決しようと数日間過ごしました。何もありません。
こんにちはオレクシ、あなたは所有者と車のテーブルがデータベースにどのように関連しているかの詳細を共有する気でしょうか?私には、あなたがdbから車を取り出すときのように、車の所有者も含まれているように見えます。その後、その車を新しい所有者に追加します。私には、Car.Ownersはすでに同じidを持つojbectを所有しているように見えます。これがこの例外の背後にある理由かもしれません。 –
ここで問題となるのは、1つのエンティティのみでModifiedを設定していることです。カーエンティティでも同じように設定しようとしましたか? –
回答ありがとう!あなたが言ったことに取り組んでいますが、これはうまくいきます。エントリを作成しようとするとうまくいきますが、更新する必要があると思います。 { var car = db.GetCar(carId); newOwner.Cars.Add(car); } } –