2017-10-17 3 views
2

.Net Core 2.0을 사용하여 Visual Studio 2017에서 개발 된 프로젝트의 기본 모델이 있습니다. 다음과 일치하는 모델.Net Core 2.0 Foreign Key defaulting 0

public class QuoteModel : BaseModel{ 
    public QuoteModel() 
    { 
     GetQuoteItems = new List<QuoteItemModel>(); 
    } 

    [Required] 
    public int QuoteTypeID { get;set; } 

    [Required] 
    [ForeignKey("QuoteTypeID")] 
    public QuoteTypeModel QuoteType { get;set;} 

    public ICollection<QuoteItemModel> GetQuoteItems { get; set; } 
} 

나는 [필수] 주석이 있거나 없는데이 문제를 해결하기 위해 노력했습니다. 문제는 새 견적을 작성하는 경우 QuoteTypeID의 기본값은 0이므로 사용자가 유형을 선택하지 않으면 모델이 여전히 유효하다는 것입니다. 나는 모델이 외래 키를 기본값으로 설정하지 않음으로써 자체를 무효화한 경우 선호하지만 외래 키가 기본값으로 설정되어있는 이유를 알지 못합니다. 내 연구에서 대부분 기본값으로 null을 요구하는 것으로 나타났습니다. ID가 제공됩니다.

외래 키 'QuoteTypeID'에 기본값이 없지만 값을 설정해야하는 방법은 무엇입니까?

또한, 명확성을 위해 BaseModel은 'CreatedOn'및 'CreatedBy'와 같은 대부분의 모델에서 원했던 몇 가지 표준 필드를 제공합니다.

+0

명시 적 세터를 추가, 당신이 타입을 설정할 때 이드를 설정합니다. –

+0

내가 따를 지 모르겠다. 형식이없는 경우 형식을 명시 적으로 설정할 수 없습니다. 견적 유형이 설정되지 않은 경우 내 목표는 실패합니다. 그러나 현재 유효한 모델로 간주되는 '0'으로 성공적으로 설정되므로 SaveChanges() 호출에서이 값을 테이블에 삽입하지 못하면 예외가 throw됩니다. –

+0

그게 무슨 소리 죠? 형식이없는 경우 키를 Null 할 수 있어야합니다. setter에서 유형을 설정할 때 유형이 존재하는 경우 id를 설정하십시오. –

답변

2

[외래 키 ("QuoteTypeID")]

는 외래 키 위에 자체를 배치해야하고, 즉 따옴표에 모델 이름이 있어야

[ForeignKey("QuoteType")] 
[Required] 
public int QuoteTypeID { get;set; } 
+0

죄송 합니다만, 지금 그대로 복사했으나 [Required]와 [ForeignKey]가 이동되어 변경없이 여러 가지 방법으로 시도되었습니다. 여전히 0으로 기본 설정되어 있으며이 방법으로 데이터베이스에 저장됩니다. –

+0

그런 경우, EF 데이터 마이그레이션은 변경 사항을 감지하지 못할 수도 있습니다. Chris Pratt의 답변을 https://stackoverflow.com/questions/28547951/update-existing-database-with-entity-framework-code-first-in-mvc에서 확인하십시오. 도움이 될 수 있습니다. – ZerosAndOnes