4

3 つのデータベース テーブルに関連する 3 つのクラスがあります。

public class Stat
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Quantity> Quantities { get; set; }
}
public class Quantity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Stat Stat { get; set; }
    public virtual Unit Unit { get; set; }
}
public class Unit
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Abbreviation { get; set; }
    public List<Quantity> Quantities { get; set; }
}

Stat には数量のリストを含めることができ、Quantity には 1 つの単位を含めることができます。Entity Framework を使用して Stat を保存する場合は、数量のリストを反復処理し、数量が既に存在するか、新しく作成されたか (データは HTML フォームから取得されます) を確認する必要があります。

public void UpdateStat(Stat stat)
{
    foreach (Quantity q in stat.Quantities)
    {
        if (q.Id == 0)
        {
            db.Quantities.Add(q);
        }
        else
        {
            db.Entry(q).State = EntityState.Modified;
        }
    }
    db.Entry(stat).State = EntityState.Modified;
    db.SaveChanges();
}

問題は、より多くの数量が同じ単位を持つ場合、次のエラーが発生することです。

数量と単位のリストを一緒に使用して統計を更新する方法がわかりません。

4

1 に答える 1

1

おっしゃったように、複数の数量が同じ単位である場合に問題が発生します。同じユニットを複数回追加することを避けるために、ユニットがすでにデータベースにあるかどうかを確認できます。存在する場合は、既存のユニットを再利用します。

if (q.Id == 0)
{
   var unit=db.Units.FirstOrDefault(u=>u.Id==q.Unit.Id);
   if(unit!=null)
      q.Unit=unit;
   db.Quantities.Add(q);
}
于 2013-08-03T22:34:13.903 に答える