Nullable属性会引发验证错误,但它不应该

时间:2015-05-08 05:53:37

标签: c# entity-framework breeze

将实体框架与Breeze一起使用,我将这个类Taxi与nullable 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。但是当我尝试保存Taxi实体时,我得到了这个验证错误:

errorMessage: "'TravelID' is required"

之前需要TravelID,但我改变了这个。当TravelID为空时,会发生此错误。当它为0时,我得到一个FK约束错误。

所以现在我的问题是,我是否忘记了任何事情/做错了什么来使可空作品?

1小时后添加:我现在找到了一个解决方法,但它真的很脏,我真的不喜欢不使用它。在前端我将TravelID设置为'0'以通过验证,然后在我的控制器中我将Taxi的TravelID设置为NULL,然后保存。

1 个答案:

答案 0 :(得分:0)

TravelID不是您的Taxi类的实际ID,它是Travel类的外键。您尝试在此处工作的映射应该在TravelMapper中,因为它属于那里。

如果您将其用于下一步,则可以省略所有这些并使用模型上的属性,例如ID属性上方的autogeneration属性:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

通过这种方式,您可以确保Travel类必须具有ID,但在Taxi类中,没有任何义务要求您指定Travel类型的对象。