【发布时间】:2013-01-28 15:52:18
【问题描述】:
似乎插入成功完成,但该项目从未真正插入到表中。
如果我在插入后立即进行控制台转储,它会将项目显示为已插入,但当我在表格上显示数据时,它不会反映此更改。
如果我选择“显示表数据”,则不会反映更改,但我在服务器资源管理器中启动新的插入和查询,则它会反映正确的更改。
在 GITHUB 上的项目:https://github.com/Fabii23/NHibernate.git
SQL 输出:
INSERT INTO Products (Name, Category, Discontinued) VALUES (@p0, @p1
, @p2);@p0 = 'Barley and Oats' [Type: String (0)], @p1 = 'Grains' [Type: String
(0)], @p2 = 0 [Type: Int32 (0)]
NHibernate: select @@IDENTITY
try
{
//Try an insert
using (ISession session = NHibernateTest.NHibernateHelper.GetCurrentSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
int _bool = 1;
var product = new Product("Wonder Bread", "Bread", _bool);
session.Save(product);
transaction.Commit();
}
}
}
catch (Exception e)
{
Console.WriteLine("Error occurred :" + e.Message);
Console.WriteLine("Error occurred :" + e);
}
}
请注意,ID autoincrements
表格列:
int 标识 | 字符串 名称 | 字符串 类别 | 位已停产|
Sql 输出:
NHibernate: INSERT INTO Products (Name, Category, Discontinued) VALUES (@p0, @p1
, @p2);@p0 = 'Wonder Bread' [Type: String (0)], @p1 = 'Bread' [Type: String (0)]
, @p2 = 1 [Type: Int32 (0)]
NHibernate: select @@IDENTITY
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HibernateExample" namespace="HibernateExample.Domain" >
<class name="Product" table="Products">
<id name="Id" type="integer">
<generator class="identity"/>
</id>
<property name="Name" type="string"/>
<property name="Category" type="string"/>
<property name="Discontinued" />
</class>
</hibernate-mapping>
休眠规格:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<property name="connection.driver_class"> NHibernate.Driver.SqlServerCeDriver</property>
<property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property>
<property name="connection.connection_string">Data Source=FirstSample.sdf;</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
【问题讨论】:
-
会话是否关闭/刷新? NHibernate 将批量访问数据,直到刷新会话 - 我假设你的
using应该处理/刷新 sesh - 你使用什么 ISession 实现? -
@Charleh 是的,ISession的实现是NHibernate.ISession
-
嗯,代码在我看来没问题——那肯定不是回滚?
-
@Charleh 不,我不这么认为,如果我在插入后立即进行控制台转储,它会将项目显示为已插入,但是当我在表上显示数据时,它不会反映这种变化。
-
冒着听起来像明显船长的风险,您确定连接到正确的数据库吗?这是作为单元测试的一部分运行的吗? Setup/Teardown 是否正在刷新数据库?这在我身上发生了好几次:)
标签: c# sql nhibernate save