11

私はコントローラーを持っています:

[HttpPost]
public ActionResult Create(Auction auction)
{
    var db = new EbuyDataContext();
    db.Auctions.Add(auction);
    db.SaveChanges();
    return View(auction);
}

モデル:

public class Auction
{
        public long Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public decimal StartPrice { get; set; }
        public decimal CurrentPrice { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }}
}

そしてビュー:

@model Ebuy.Website.Models.Auction
@using (Html.BeginForm())
{
    <p>
        //All the information fields...
        @Html.LabelFor(model => model.EndTime)
        @Html.EditorFor(model => model.EndTime)
    </p>
}

実行しようとすると、次のエラーが表示されます。

datetime2 データ型を datetime データ型に変換すると、範囲外の値になりました。

model-controller-view は、1 対 1 でコピーされた本からのものです。

EndTimeこのエラーが発生しないように、フィールドに入力する必要がある形式は何ですか?

4

10 に答える 10

3

datetime2 データ型の列は null 値を受け入れますか。そうでない場合、これらの列に値を割り当てていないときに、このエラーが発生する可能性があります。

モデルで null 許容プロパティが使用されていない場合、既定では、CodeFirst は null 非許容の列を作成します。これらのプロパティを null 許容の日時に変換してみてください。

于 2013-04-30T11:36:06.977 に答える
0

サービス層の連絡先エンティティに change_date を追加しようとしたときに、同様のエラーが発生しました。この問題は、コントローラーからパラメーターを追加することで解決されました。コントローラーからパラメーターを追加してみてください。

于 2013-10-10T11:16:08.210 に答える
0

DB の DateCreated にデフォルトの getdate() 値がありました。必要があるとは思わなかったので、EF に値を設定していませんでした。挿入時にEFを介して値を渡すと、エラーはなくなりました。そもそもなぜそのエラーがあるのですか?私はそれを理解したことがありません。

于 2015-12-17T21:43:34.817 に答える
0

私もこの問題にぶつかりました。

datetime2 データ型から datetime データ型への変換で範囲外の値が返された場合、非常に役に立たないエラーが発生します。

この問題を解決するには、次のことを行う必要がありました (上記の例を使用)。

パッケージ マネージャー コンソールは、-> ツール -> ライブラリ パッケージ マネージャー -> パッケージ マネージャー コンソールから見つけることができます。

パッケージ マネージャー コンソールでデータベースの移行を有効にしました -> Enable-Migrations

次に、コントローラー クラスに以下のコードを追加します。

public class Auction
{
public long Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public decimal StartPrice { get; set; }
public decimal CurrentPrice { get; set; }

// My Edit to the code Start -->
public Nullable<DateTime> StartTime { get; set; }
public Nullable<DateTime> EndTime { get; set; }}
// My Edit to the code Finish <--
}

次に、Models クラスで:

[HttpPost]

// My Edit to the code Start -->
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode=true, DataFormatString = "{0:d}")]]
// My Edit to the code Finish <--

public ActionResult Create(Auction auction)
{

// My Edit to the code Start -->
if(ModelState.IsValid)
{
// Only Apply the DateTime if the Action is Valid...
auction.StartTime = DateTime.Now;
}
// My Edit to the code Finish <--

var db = new EbuyDataContext();
db.Auctions.Add(auction);
db.SaveChanges();
return View(auction);
}

次に、パッケージ マネージャー コンソールの変更をデータベースに追加します -> Add-Migration (変更内容はここに表示されます)

次に、パッケージ マネージャー コンソール -> Update-Database でデータベースの更新を実行します。

上記の実装で、データベースが参照するデータが正しいことを確認することが重要です。

E.G: 17/06/2013 12:00:00 AM

このエラーは驚くほどばかげたエラーですが、私自身を含め、多くの人がこのエラーに気付いたようです。これで、このエラーが発生する理由がわかりました。修正して回避するのは簡単なようですが、MVC の最後のリリースでこのような一般的な問題が修正されなかった理由は、私の理解を超えています。

于 2013-06-17T04:01:50.957 に答える
0

この投稿 - 「datetime2 データ型から datetime データ型への変換により、範囲外の値が発生しました」の解決策 (SaveChanges の呼び出し時に Entity Framework を使用) では、属性を使用することを提案しています。それは私にとって問題を解決しました。

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public Nullable<System.DateTime> Created { get; set; }
于 2016-02-16T18:10:41.023 に答える