0

EF4 코드 우선 MVC3을 사용하고 있습니다. 내가 specificEventId = 2specificEvent = X, 새로운 SpecificEvent 객체가 DB에 생성됩니다와 함께 주문 개체를 저장하려고하면 이미 DB에 ID 2와 특정 이벤트 X가, 비록MVC3 EF4는 저장시 외래 키 객체를 복제합니다.

public class Order { 

    public int ID { get; set; } 

    [Required] 
    public float Price { get; set; } 

    [Required] 
    public int PayMethodId { get; set; } 
    public PayMethod PayMethod { get; set; } 

    public int? SpecificEventId { get; set; } 
    public SpecificEvent SpecificEvent { get; set; } 

    public int? SeasonalTicketId { get; set; } 
    public SeasonalTicket SeasonalTicket { get; set; } 
} 

: 나는 다음과 같은 모델을 가지고 . specificEventId = 2specificEvent = null으로 시도 할 때 데이터 검증 오류가 발생합니다.

내가 뭘 잘못하고 있니?SpecificEventSeasonalTicket을 Nullable로 설정하고 EF4가 'Order'를 저장할 때마다 DB에 이러한 객체의 새 인스턴스를 만들지 않기를 바랍니다.

업데이트

이 DB에 Order을 저장하는 내 코드입니다 : 내가 저장하면

public void SaveOrder(Order order) 
{ 
    Order fromDb = null; 

    // If editing an existing object. 
    if ((fromDb = GetOrder(order.ID)) != null) 
    { 
     db = new TicketsDbContext(); 
     db.Entry(order).State = System.Data.EntityState.Modified; 
     db.SaveChanges(); 
    } 
    // If adding a new object. 
    else 
    { 
     db.orders.Add(order); 
     db.SaveChanges(); 
    } 
} 

, 나는 else 절에 도달 않습니다.

+0

이것은 EF에 대한 가장 일반적인 질문이므로 질문하기 전에 무엇을 검색했는지 궁금합니다. –

+0

@ 라디 슬라브 : "ef \ mvc 선택적인 외래 키", "ef \ mvc 객체가 저장 중 중복"등을 검색했습니다. 내 사례와 가까운 몇 가지 예제를 발견했지만 여전히 저에게는 효과가 없었습니다. 어쩌면 나는 뭔가를 놓쳤을 것이다. (나는 수표를 틀었고 나 자신을 다시 확인 했음) 어쩌면 내가 잘못된 것을 찾았을 것이다. 나는 몇 시간 동안이 버그를 디버깅하려고 시도했다 (나는 EF 멍청이이다. :). 당신이 뭔가 명확한 것을 놓치고 있다고 생각하거나 내가 찾을 수있는 다른 것들에 대한 제안이 있다면, 나는 듣기보다 행복 할거야 :) – Ofirov

+0

엔티티를 저장할 코드를 질문에 추가해야합니다. –

답변

1

실제 질문은 어디에서 X의 인스턴스를 가져 왔습니까? 마치 EF가이 인스턴스에 대해 알지 못하는 것처럼 보입니다. EF를 통해 기존의 SpecificEvent를 가져 와서 네비게이션 속성을 설정하기 위해 반환하는 프록시를 사용하거나, EF에 X를 "첨부"하도록 지시하여 의도가 무엇인지 알 수 있도록해야합니다. EF가 알고있는 한, 충돌하는 ID가있는 새 인스턴스를 보내려고하고 있으므로 오류가 올바르게 발생하고 있습니다.

+0

EF를 사용하여 DB에서 가져 왔으며 디버그 모드에서 개체를 볼 때 ID가 정확하다고 보입니다 (Order의 ID와 DB의 ID가 일치 함). 나는 서버로부터의 이전 요청에서 그것을 얻었고 세션에서 그것을 저장했다. 나는 다음 요청에 대해서만 실제 저장 시도를했다. 내 이해에 문제가되지 않습니다. – Ofirov

+1

이 경우 다른 문맥에서 왔지만 이전 요청의 문구는 아마도 오래 전에 사라 졌을 것입니다. 새로운 컨텍스트에 연결해야합니다. –

+0

감사! 그거였다 :) – Ofirov