通过将实体框架与Breeze结合使用,我得到了带有可空int TravelID的此类出租车:
public class Taxi
{
// some primary key/Id stuff
// Then these:
public int? TravelID { get; set; }
public virtual Travel Travel { get; set; }
}
(当然是简化的)映射看起来像这样:
public TaxiMap()
{
this.Property(t => t.TravelID).IsOptional();
}
我的数据库工具(HeidiSQL)显示该属性可为空,并且默认值为NULL。但是,当我尝试保存出租车实体时,出现此验证错误:
errorMessage: "'TravelID' is required"
之前需要TravelID,但我是这样更改的。当TravelID为null时,会发生此错误。当它为0时,我得到FK约束错误。
所以现在我的问题是,我是否忘记了什么/做错了什么才能使可空工作有效?
1小时后添加:我现在已经找到一种解决方法,但是它确实很脏,我真的更喜欢不使用它。在前端,我将TravelID设置为“ 0”以通过验证,然后在控制器中,在保存之前,我将出租车的TravelID设置为NULL。
最佳答案
TravelID不是出租车类的实际ID,它是Travel类的外键。您要在此处执行的映射应该在TravelMapper中,因为它属于该映射。
如果将其转到下一步,则可以忽略所有这些内容,并在模型上使用属性,例如ID属性上方的autogeneration属性:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
这样,您可以确保Travel类必须具有ID,但在Taxi类中,没有任何东西使您必须指定Travel类型的对象。
关于c# - Nullable属性不应该引起验证错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30116692/