c# - 可空属性引发验证错误,而它不应该

标签 c# entity-framework breeze

使用带有 Breeze 的 Entity Framework ,我有这个类 Taxi 和可为空的 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”以通过验证,然后在我的 Controller 中,我在保存之前将 Taxi 的 TravelID 设置为 NULL。

最佳答案

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

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

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

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

关于c# - 可空属性引发验证错误,而它不应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30116692/

相关文章:

c# - 将嵌套的 foreach 编写为 LINQ 以聚合两个单独的值

c# - Linq to Entities - 是否可以在对数据库的单个查询中实现这一点?

typescript - "Q js is undefined."尝试解决测试方法中 aurelia-breeze 的 promise (karma+jasmine)

c# - MVC4 表单验证 - 自定义 html 消息 howto?

c# - 在 .NET-core 中找不到 TestContext 类

c# - 自定义 OutputCache 提供程序不工作(调用 get 但未设置或添加)

c# - 如何在 C# 中使用 Webclient 填写表单并提交

c# - Entity Framework 种子不工作

javascript - 级联删除不适用于 Breeze

entity-framework - 问题包括查询中的导航属性