C# Nullable属性在不应引发验证错误时引发验证错误

C# Nullable属性在不应引发验证错误时引发验证错误,c#,entity-framework,breeze,C#,Entity Framework,Breeze,使用实体框架和Breeze,我有一个类Taxi,它具有可为null的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() { th

使用实体框架和Breeze,我有一个类Taxi,它具有可为null的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,默认值也是NULL。但是,当我尝试保存一个滑行实体时,会出现以下验证错误:

errorMessage: "'TravelID' is required"
TravelID以前是必需的,但我这样更改了它。当TravelID为空时会发生此错误。当它为0时,我得到一个FK约束错误

所以现在我的问题是,我是否忘记了什么/做了什么错事使可空值起作用


在1小时后添加:我现在已经找到了一个解决方法,但它非常脏,我真的不想使用它。在前端,我将TravelID设置为“0”以通过验证,然后在控制器中,我在保存之前将出租车的TravelID设置为NULL。

TravelID不是出租车类别的实际ID,它是旅行类别的外键。您试图在这里工作的映射应该在TravelMapper中,因为它属于那里

如果进入下一步,可以忽略所有这些,并在模型上使用属性,例如ID属性上方的“自动生成”属性:

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

通过这种方式,您可以确保旅行类必须有一个ID,但在出租车类中,您没有义务指定旅行类型的对象。

当您提到实体框架作为标记时,您是否在更改TravelID现在是可选的而不是强制性的之后更新了模型?您是否已将
TaxMap
添加到EF配置对象中?Thomas和Jenish都是这样。@Peter您对问题I的更新将出租车的TravelID设置为NULL没有任何意义,因为您在问题
中提到,当TravelID为空
。@JenishRabadiya问题是,它确实有意义。当TravelID为空时,当我尝试在前端保存实体时,我会得到上面提到的验证错误。因此,为了通过验证,我在前端将其设置为0,然后在后端将其更改为null,否则后端会抛出一个外键contstraint错误。(顺便说一句,我完全理解你的困惑)虽然你的观察可能是正确的,但我认为它并没有真正回答我的问题。我有多个模型,它们是以相同的方式映射的(最初不是由我,而是由在我之前从事这个项目的另一名实习生映射的),它们都可以正常工作。是的,我知道TravelID是一个外键。如果你知道TravelID是一个外键,为什么要将它映射为主键?如果您将此特定映射器与其他映射器进行比较,它们是否有任何显著差异,例如关系(一对一,一对多…)我有一个Flight类,它看起来完全相同,只是有一些特定的属性,并且该类可以正常工作,因此我感到困惑。就我所知,T.Id是主键,T.TravelID是外键。。。为了避免可能的混淆,我将从问题中删除T.Id部分。