1

Null 非許容の日付フィールドを持つ単純なテーブルがあります。フィールドには、DB で GetDate() のデフォルト値があります。DB テーブルは EntityFramework を介して転送されます。MVC 4 テンプレートにそのテーブルの create.cshtml ページを自動生成させると動作しますが、そのテーブルを実行しようとするとエラーが発生します: ディクショナリに渡されたモデル項目はnull ですが、このディクショナリには 'System.DateTime' 型の null 以外のモデル アイテムが必要です。

CSHTML ファイル:

@model MyModel.Content
<div class="editor-label">
        @Html.LabelFor(model => model.ActiveDate)
    </div>      
    <div class="editor-field">
        @Html.EditorFor(model => model.ActiveDate)
        @Html.ValidationMessageFor(model => model.ActiveDate)
    </div>

EF 自動生成クラス:

public partial class Content
{
    public int ID { get; set; }
    public string Title { get; set; }
    public int CategoryID { get; set; }
    public string Content1 { get; set; }
    public bool IsActive { get; set; }
    public System.DateTime ActiveDate { get; set; }
    public System.DateTime DeactiveDate { get; set; }
    public System.DateTime LastEditDate { get; set; }
    public string LastEditor { get; set; }

    public virtual ContentCategory ContentCategory { get; set; }
}

これは、これを行う方法としてはそれほど珍しいことではないようです。テンプレートは、null 非許容の新しい日付の作成に対応できるべきではないでしょうか?

これを回避するにはどうすればよいですか?

4

1 に答える 1

0

これに対処する方法は、viewmodel で null 許容の DateTimes を使用し、それらに [Required] 属性を設定することです。これにより、モデルが検証された場合、エンティティ モデルに値をコピーしてデータを保存するときに保証できます。それは成功します。このようにして、エンティティ モデル (データベースに保存されるもの) を null 以外の日時として保持できます。

もう1つのオプションは、他のデータまたは現在の日時に基づいて、適切なものがある場合に日時のデフォルト値を提供することです。たとえば、ActiveDate を現在の日付にデフォルト設定すると、デフォルトでアクティブになり始めます。

それ以外の場合は、1/1/0001 のような無意味なデフォルトを提供したくないため、最初のオプションが最適です。

于 2013-03-06T22:45:39.787 に答える