1

この単純なモデルがある場合:

public class User
{
    // Primary key
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid UserId { get; set; }

    [Required]
    public Int32 FailedPasswordAttemptCount { get; set; }

    [Required]
    public Language Language { get; set; }
} 
public class Language
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid LanguageId { get; set; }

    [MaxLength(30)]
    public String LocaleName { get; set; }
}

そして、私はこのコードを実行します:

var user = context.Users.Single(u => u.UserId == userId);
user.FailedPasswordAttemptCount++;
context.SaveChanges();

DbEntityValidationException例外がスローされThe Language field is required.ます。

Languageプロパティが必須としてマークされており、データベースからフェッチされたときにプロパティが null であるため (遅延ロードまたは積極的ロードではない) 、技術的にはこれは当てはまります。

しかし、どうすればこの動作を変更できますか?

  • 検証を完全に無効にしたくない
  • フィールドを遅延/熱心にロードしたくない
  • モデルから Required タグを削除したくない

他にどのようなオプションがありますか?

4

1 に答える 1

2

クラスにプリミティブ FK フィールド (おそらくLanguageId) を追加することで、これを防ぐことができますUser。これは、エンティティ フレームワークでは珍しいことではありません。プリミティブ プロパティを取得または設定すると、作業や不要な (遅延) 読み込みが節約される場合が多くあります。

于 2012-11-25T20:51:56.287 に答える