c# - Code First Fluent API 验证不起作用

标签 c# asp.net-mvc-3 entity-framework ef-code-first entity-framework-4.3

有一个类——这是一个普通类,没什么特别的:

public class Trader{

public Guid UserId {get;set;}
public int TraderId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string PhoneNumber { get; set; }
public string Skype { get; set; }
public string Photo { get; set; }
public string Email { get; set; }

public virtual User User { get; set; }
}

映射:

 public TraderMap()
        {
            this.ToTable("Trader", "General");
            this.HasKey(a => a.TraderId);
            this.HasRequired(a => a.User).WithMany().HasForeignKey(a => a.UserId);
            Property(a => a.UserId).HasColumnName("UserID").IsRequired();
            Property(a => a.TraderId).HasColumnName("TraderID").IsRequired();

            Property(a => a.FirstName).HasMaxLength(50).IsRequired();
            Property(a => a.LastName).HasMaxLength(50).IsRequired();
            Property(a => a.PhoneNumber).HasMaxLength(25).IsRequired();
            Property(a => a.Skype).HasMaxLength(50).IsOptional();
            Property(a => a.Photo).HasMaxLength(100).IsOptional();
            Property(a => a.Email).HasMaxLength(100).IsRequired();
        }

当我在表单( View )中将 FirstName 或其他具有 IsRequired() 的字段留空时,验证不会启动。它只是遇到错误:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

不幸的是,这个错误并没有说明太多。我正在深入挖掘,但我唯一能得到的是

Invalid column name discriminator.

我认为这会是某处遗忘的继承(对于 User 类),但我没有发现任何可疑的东西。

问题是当我在 Trader 类中使用属​​性时,一切都按预期工作。

   public class Trader{

    public Guid UserId {get;set;}
    public int TraderId { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string PhoneNumber { get; set; }
    public string Skype { get; set; }
    public string Photo { get; set; }
    [Required]
    public string Email { get; set; }

    public virtual User User { get; set; }
    }

使用属性验证工作正常并且@Html.ValidationMessageFor 开始显示错误消息并且它不允许发送 NULL 值。

您对我的映射有什么问题有什么建议吗?

更新 1 事实上,上面的属性是这个问题的可能解决方案。

最佳答案

仅当您使用“数据注释”时才会启动验证 - 而 HasRequired 执行映射 - 数据注释属性同时执行映射和验证部分。
即为了验证您的观点,我相信您必须在您的属性上放置注释/属性。

这通常用于“区分”仅“映射”与映射和验证。也就是说,如果你想同时使用属性,如果你只想映射使用流畅的配置。

这里也有一个相关的答案https://stackoverflow.com/a/9310435/417747https://stackoverflow.com/a/9789984/417747

编辑:多亏了 Justin,这个更接近您的需求
How to make Fluent API configuration work with MVC client side validation?

关于c# - Code First Fluent API 验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047582/

相关文章:

c# - 将字符串值与枚举的字符串值进行比较

c# - 从 swagger 响应中排除 ef 虚拟属性

c# - 我可以将 Math.NET 运行时与 .NET 2.0 或 .NET 3.5 应用程序一起使用吗?

c# - 类库能否读取正在执行的编码 UI 测试的 app.config 文件?

asp.net-mvc - [问]asp.net mvc更新数据库报错

多线程应用程序中的 WCF 代理单例

c# - 将 EF 模型序列化为 Json 时的循环引用

asp.net-mvc-3 - MVC3 操作中的 HTML5 视频无法正常工作

c# - DbContext 可以组合而不是继承吗?

c# - 错误 "An entity object cannot be referenced by multiple instances of IEntityChangeTracker"