日付入力用のテキストボックスを持つフォームがあります。もし私が日付を提供すれば、すべてが大丈夫です。日付を指定しない場合(空のままにする)、DateTime.min(1/1/0001)の値が送信されます。そして、これが原因エラー:datetimeデータ型へのDATETIME2データ型の変換がデータベースに保存するときに空の日付がDateTime.Min値に変換されないようにするにはどうすればよいですか?エンティティフレームワーク
私の日付プロパティがnullとして定義されている範囲外の値になった:私が欲しいもの
public Nullable<System.DateTime> InstallDate { get; set; }
私が日付を提供しない場合、データベースに書き込まれるNULL値です。 更新方法で1/1/0001をチェックしてヌルを送ることができますが、それを行う必要はありますか? この問題を回避する方法はありますか?おかげ
編集:私は私の更新メソッドに以下のコードを追加し、問題を解決し
:
tank.InstallDate = tank.InstallDate == DateTime.MinValue ? null : tank.InstallDate;
は、だから私のコードは次のようになります。ここでは
public void UpdateTank(Tank tank)
{
using (RetailFuelEntities ctx = new RetailFuelEntities())
{
tank.InstallDate = tank.InstallDate == DateTime.MinValue ? null : tank.InstallDate;
ctx.Tanks.Attach(tank);
ctx.Entry(tank).State = EntityState.Modified;
ctx.SaveChanges();
}
}
私のObjectDataSourceです:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetTank"
TypeName="DataAccess.Fuel.EF4.Tanks" DataObjectTypeName="DataAccess.Fuel.EF4.Tank"
DeleteMethod="DeleteTank" InsertMethod="InsertTank" UpdateMethod="UpdateTank">
<SelectParameters>
<asp:ControlParameter ControlID="TextBoxTankId" Name="TankId" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
ヌルチェックを避けることができるのだろうかと思います。
もっとコードを入力してください。これはEFの自動生成プロパティですか?どこからこのプロパティを設定し、どのように設定しますか?フォーム(WinForms、WPF?)からデータベース(列の型、nullは許可されていますか?)に質問の全体のルートを走査してみてください。 –
このプロパティはDbContextジェネレータによって生成されます。私のSQLテーブルでは、InstallDateフィールドはタイプ:Shared.DateAndTime:smalldatetimeです。 FormViewでは、Install Dateを提供するはずのTextBoxがあります。私の問題は、Updateボタンをクリックすると、テキストボックスに何も置かないと、Updateメソッド(オブジェクトが更新される)がDateTime.MinValueと等しいmyObject.InstallDateになります。私はそれをnullにして、それがなぜこのように変換されるのか理解していないだけです。 – bobetko
実際にはあまりコードがありません...私の意見では、選択、更新、挿入、削除を実行するために正しく設定されたFormView、ObjectDataSourceがあります。パラメータのUpdate、Insert、Deleteは、FormViewがバインドされているオブジェクトを受け取ります。 Updateメソッドを除いて、私はDbContextジェネレータがすべてのオブジェクトを生成した後にカスタムコードを書きませんでした。 – bobetko