通过将实体框架与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/

10-13 04:29