NHibernateを初めて使用しています。 私はマッピングファイル、モデルを作成しました。しかし、今私は現在の日付を使用している挿入のためのストアドプロシージャを使用しようとしている、それは例外をスローされます。NHibernateとストアドプロシージャを使用したSqlDateTimeのオーバーフロー
マイmaping:
<class name="MyClass" table="table_name">
<id name="Id" column="id">
<generator class="identity"/>
</id>
<property name="Sum" column="sum"/>
<property name="Direction" column="direction"/>
<property name="Date" column="datetime"/>
<property name="Number" column="number"/>
<sql-insert xml:space="preserve">
EXECUTE dbo.pr_AddNew @sum = ?, @direction = ?
</sql-insert>
</class>
私のクラス:
public class MyClass
{
public virtual int Id { get; set; }
public virtual DateTime Date { get; set; }
public virtual decimal Sum { get; set; }
public virtual byte Direction { get; set; }
public virtual int Number { get; set; }
}
そして、私のストアドプロシージャ:
CREATE PROCEDURE pr_AddNew
@sum decimal(19, 2),
@direction int
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.table_name([datetime], sum, direction, number)
VALUES(GETDATE(), @sum, @direction, dbo.fn_GetNextNumber())
END
GO
あなたは、私が取得するGETDATE()関数を使用しています見ることができるように現在の日にdb側。
[TestMethod]
public void AddTest()
{
var myClass= new MyClass{ Direction=0, Sum=150};
IRepository repository = new MyClassRepository();
repository.Add(myClass);
using (ISession session = _sessionFactory.OpenSession())
{
var fromDb = session.Get<MyClass>(myClass.Id);
Assert.IsNotNull(fromDb);
Assert.AreNotSame(myClass, fromDb);
}
}
このコードは私に例外与える::
そしてここでは、私の試験方法である "SQLDATETIMEオーバーフローを"
var myClass= new MyClass{ Direction=0, Sum=150, Date=DateTime.Now()};
すべてはokです:として
は、だから私は、MyClassのインスタンスを作成する場合。私が理解しているように、問題はSQLとC#のminTime DateTime値の差です。しかし、私は日時の値をSQLに渡す必要はありません。 これで何ができますか?
「Date」列が自動的に生成されることをNHに伝える必要があります。それ以外の場合は、System.DateTime.MinValue、つまり「0001-01-01」を保存しようとします。 –
@PanagiotisKanavos私はそれを理解していますが、どうすればいいですか? – Gleb