2017-10-17 290 views
2

我有一個使用.Net Core 2.0在Visual Studio 2017中開發的項目的基本模型。型號以下.Net Core 2.0默認爲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

時,設置Id我不完全相信我遵循。如果不存在類型,我不能顯式設置類型。如果沒有設置報價類型,我的目標是報價失敗。但是,目前,它成功地將其設置爲'0',這被認爲是有效的模型,這導致拋出異常,因爲SaveChanges()調用將無法將其插入到表中。 –

+0

你在說什麼?如果沒有類型存在,你的密鑰應該是空的。如果他們類型存在,當你在setter中設置類型時,也設置ID –

回答

2

[ForeignKey的( 「QuoteTypeID」)

應放在外鍵上方本身應具備的型號名稱在引號,即,

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

道歉之前創建一個通用基礎驗證程序,我將它複製到現在的樣子,但[必需]和[ForeignKey]已被移動並嘗試了多種不同的方式,沒有任何更改。它仍然默認爲0,並允許以這種方式將其保存到數據庫。 –

+0

在這種情況下,EF數據遷移可能無法檢測到這種變化,因爲它是小的變化。請看看克里斯普拉特的回答https://stackoverflow.com/questions/28547951/update-existing-database-with-entity-framework-code-first-in-mvc它可能有幫助。 – ZerosAndOnes