私は、すべてのエンティティが自分の参照を持つ別のエンティティへの参照を持つ空港エンティティを持っています。EntityState.Modifiedを使用してEF 6 DbContexの更新に失敗しました
空港を更新しようとしているときには、私はいくつかの例外を持っている.. HERESに私はこれに持ってまで、私はすでに、最も簡単な更新を試してみた
var airport = context.Airports
.Where(a => a.AirportID == airportToUpdate.AirportID).FirstOrDefault();
var ai = AirportConverter.ToModel(airportToUpdate);
ai.AirportID = airport.AirportID;
airport.IsOpenForFlights = ai.IsOpenForFlights;
airport.EmergencyLandings = new List<Scenario>();
foreach (var emergency in ai.EmergencyLandings)
{
var sce = context.Scenarios
.Include(s => s.Mission).Include(s => s.Planes)
.Where(s => s.ScenarioID == emergency.ScenarioID).First();
airport.EmergencyLandings.Add(sce);
context.Entry(sce).State = EntityState.Modified;
}
airport.ExistingFilghtNumbers = new List<string>();
foreach (var flight in ai.ExistingFilghtNumbers)
{
airport.ExistingFilghtNumbers.Add(flight);
context.Entry(flight).State = EntityState.Modified;
}
var parkingLot = ai.ParkingLots.First();
var pLot = context.ParkingLots
.Include(p => p.AtAirport)
.Include(p => p.ParkingStations.Select(pa => pa.PlaneParking))
.Where(p => p.ParkingLotID == parkingLot.ParkingLotID).First();
airport.ParkingLots = new List<ParkingLot>();
airport.ParkingLots.Add(pLot);
context.Entry(pLot).State = EntityState.Modified;
airport.Queues = new List<PlanesQueue>();
foreach (var queue in ai.Queues)
{
qu = context.PlanesQueues
.Include(p => p.Planes.Select(pl => pl.AtQueue))
.Where(q => q.QueueNumber == queue.QueueNumber).First();
qu.Planes = queue.Planes;
airport.Queues.Add(qu);
context.Entry(qu).State = EntityState.Modified;
}
airport.Routes = new List<Route>();
foreach (var route in ai.Routes)
{
var ro = context.Routes
.Include(r => r.PlaneOnRoute)
.Where(r => r.RouteID == route.RouteID).First();
airport.Routes.Add(route);
context.Entry(route).State = EntityState.Modified;
}
//var entry = context.Entry(airport);
//entry.State = System.Data.Entity.EntityState.Modified;
context.SaveChanges();
空港に更新しようとしたコードコード は、エンティティを最初に削除してからもう一度追加し、空港自体を更新する前にすべてのエンティティを更新しようとしました。型「FlightsControl.Dal.Entities.Route」が複数のエンティティが同じ主キー値を持っているので、
保存または受諾の変更などの
、それはまだ動作しません、多くの例外に失敗しました。明示的に設定された主キー値が一意であることを確認します。データベース生成の主キーがデータベースとEntity Frameworkモデルで正しく構成されていることを確認します。 Entity Designerをデータベースファースト/モデルファースト構成に使用します。それは私がちょうどそれを追加し、これを更新しないようにしようとしている、同じ主キーを持っています。..
を当然のコードファースト構成
のための「HasDatabaseGeneratedOption」流暢なAPIや 『DatabaseGeneratedAttribute』を使用しますこれは、空港のエンティティ
public virtual int AirportID { get; set; }
public ICollection<PlanesQueue> Queues { get; set; }
public ICollection<ParkingLot> ParkingLots { get; set; }
public ICollection<Route> Routes { get; set; }
public virtual ICollection<string> ExistingFilghtNumbers { get; set; }
public virtual bool IsOpenForFlights { get; set; }
public ICollection<Scenario> EmergencyLandings { get; set; }
空港コンフィグ
です
まあ、Routeの特定のケースでは、あなたは 'var ro = context.Routes.Include(r => r.PlaneOnRoute).Ahereの変数にそれを問い合わせて返します.Where(r => r.RouteID = = route.RouteID).First(); 'であり、' context.Entry(Route).State = EntityState.Modified;のモデルで変更されたものを追加してフラグを立てるために別のエンティティを使用しています。 –