クラスがあります-それは特別なことではない一般的なクラスです:
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();
}
フォーム(ビュー)でIsRequired()が空のFirstNameまたはその他のフィールドをそのままにしておくと、検証が開始されません。エラーが発生するだけです。
1つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください。
残念ながら、このエラーはあまり意味がありません。もう少し掘り下げていたのですが、手に入れたのは
列名識別子が無効です。
どこかで(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値の送信を許可しません。
私のマッピングで何が問題になるのか、何か提案はありますか?
UPDATE 1 実際、上記の属性はこの問題の可能な解決策です。