首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SqlDateTime和存储过程的NHibernate溢出

使用SqlDateTime和存储过程的NHibernate溢出
EN

Stack Overflow用户
提问于 2016-07-04 12:41:18
回答 1查看 95关注 0票数 0

我是NHibirnate的新手。我已经创建了映射文件、模型和那些工作,但是现在我尝试使用存储过程来插入,在这里我使用的是当前日期,它会抛出一个异常。

我的地图:

代码语言:javascript
复制
  <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>

我的班:

代码语言:javascript
复制
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; }
}

我的存储过程:

代码语言:javascript
复制
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端的当前日期。

下面是我的测试方法:

代码语言:javascript
复制
    [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溢出“。

因此,如果我将myClass实例创建为:

代码语言:javascript
复制
var myClass= new MyClass{ Direction=0, Sum=150, Date=DateTime.Now()};

一切都很好。据我所知,问题在于SQL中最小可能的DateTime值与C#中的最小可能值之间的差异。但我不需要将日期时间值传递给sql。我能用这个做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-05 11:46:29

您必须将其映射为生成的列。它告诉NH不要将其发送到数据库进行插入或更新,还告诉NH值是在insert或update之后加载的(这可能是性能问题)。

代码语言:javascript
复制
generated="never|insert|always"

就你而言:

代码语言:javascript
复制
<property name="Date" column="datetime" generated="insert"/>

顺便说一句,有一个完全不同的方法来获得同样的。您可以在类的构造函数中设置Date并正常映射它。相对于处理存储过程,它的痛苦要小得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38185039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档