将实体框架与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,然后保存。
答案 0 :(得分:0)
TravelID不是您的Taxi类的实际ID,它是Travel类的外键。您尝试在此处工作的映射应该在TravelMapper中,因为它属于那里。
如果您将其用于下一步,则可以省略所有这些并使用模型上的属性,例如ID属性上方的autogeneration属性:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
通过这种方式,您可以确保Travel类必须具有ID,但在Taxi类中,没有任何义务要求您指定Travel类型的对象。