2016-11-18 3 views
0

코드 우선으로 엔티티 프레임 워크에서 일대일 관계를 실현하려고합니다. FlightPlan이있는 비행기 테이블을 만들고 싶습니다.엔티티 프레임 워크를 일대일 관계로 실현

비행기 :

public class Airplane 
{ 
    [Key] 
    public int AirplaneId { get; set; } 
    public int Capacity { get; set; } 
    public AirplaneStatus AirplaneStatus { get; set; } 
    public int AmountOfPassengers { get; set; } 
    public int AirfieldId { get; set; } 

    public virtual FlightPlan FlightPlan { get; set; } 
} 

플라이트 : 나 마이그레이션 이러한 클래스를 초기화하면

public class FlightPlan 
{ 
    [Key] 
    [ForeignKey("Airplane")] 
    public int AirplaneId { get; set; } 
    public int AirfieldFrom { get; set; } 
    public int AirfieldTo { get; set; } 
    public int AmountOfPassengers { get; set; } 

    public virtual Airplane Airplane { get; set; } 
} 

은 다음 테이블 구조가 생성된다 : I 작성 관리 후

enter image description here

FlightPlan이있는 비행기, tak 몇 가지 해결 방법이 있지만, 비행기에는 내가 시도한 것에 상관없이 Flightplan이 없습니다.

내가이 문제를 해결하려면 어떻게

enter image description here

enter image description here

?

편집

는 테스트를 위해 내가 모든 업데이트 비행기에 플라이트를 추가합니다. 이 경로를 수정하면 Flightplan을 추가하기위한 경로가 만들어집니다. 코드 :

var airplane = _context.Airplanes.Find(model.AirplaneId); 
var flightplan = new FlightPlan() { AirfieldFrom = 1, AirfieldTo = 2, AmountOfPassengers = 30 }; 
airplane.FlightPlan = flightplan; 
_context.SaveChanges(); 

내 문제의 해결책은 비행기를 검색 할 때 EF가 FlightPlan을 포함하도록 강제하는 것입니다.

+1

항공편 계획을 생성하고 DB에 추가 했습니까? 비행기/비행 계획 작성 코드를 게시하십시오. – Gusman

+0

모델이 정확합니다. 삽입 코드를 표시하십시오. http://www.entityframeworktutorial.net/EntityFramework4.3/add-one-to-one-entity-using-dbcontext.aspx –

+0

어째서 비행과 비행기 모두에서 'AmountOfPassengers'를 얻었습니까? 비행기에있는 사람이 정원이되어야합니까? –

답변

0

이것은 FlightPlanvirtual이므로 지연로드로 인한 것일 수 있습니다.

var airplane = db.Airplanes.First(); //pull airplane from db 
var passengerAmount = airplane.FlightPlan.AmountOfPassengers //attempting to use 
// FlightPlan property after pulling Airplane from db should load the FlightPlan 

또한 DB에서 당겨 때 FlightPlan 속성을 포함하는 EF 강제 할 수 있습니다.

using System.Data.Entity; 
var airplane = db.Airplanes.Include(m => m.FlightPlan).First(); 
+0

EF가 FlightPlan propery를 포함하도록 강요했습니다! 고마워요! – pmulders

0

는 다음과 같은 방법으로 수행해야합니다 물론

public class Airplane 
{ 
    [Key] 
    public int Id { get; private set; } 

    public virtual FlightPlan FlightPlan { get; private set; } 

    // ... other properties 
} 

public class FlightPlan 
{ 
    [Key] 
    public int Id { get; private set; } 

    public virtual Airplane Airplane { get; private set; } 

    // ... other properties 
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<FlightPlan>() 
     .HasRequired(flightPlan => flightPlan.Airplane) 
     .WithOptional(airplane => airplane.FlightPlan); 

     base.OnModelCreating(modelBuilder); 
} 

귀하의 세터 public을 수 있습니다.

+0

나는 그의 코드가 정확하다고 믿는다. 이 코드는 관계의 주요 끝을 결정할 수 없다는 오류를 생성합니다. https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449317867/ch04s07.htaccess Admin Home English Language Content –

+0

나는 게시 된 코드가 작동하고 '비행기 : int ID','FlightPlan : int Id, int AirplaneId' 데이터 테이블을 생성합니다. 당신이 게시 한 링크에서 그들은'Person' 클래스의 정의조차 제공하지 않는다. –

+0

유창한 코드가 없다면 "관계의 주요한 끝을 결정할 수 없다"라는 오류 메시지가 나타날 것이다. 나는 EF 6.1.3에서 그것을 시도했다. –