2017-10-17 298 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