【发布时间】:2016-03-11 20:44:13
【问题描述】:
我正在与NHibernate 和MySQL 合作开发ASP.Net MVC Web 项目。一切正常,但我在以下流程中随机出现错误。
NHibernate.ISession _Session = MvcApplication.SessionFactory.GetCurrentSession();
using (ITransaction t = _Session.BeginTransaction())
{
SavedIDOfModel1 = (Int32)_Session.Save(Model1);
//DAO will use same _Session to get data from DB
Model2 oModel2 = DAO.GetModel2FromDB();
oModel2.Model1ID = SavedIDOfModel1;
_Session.SaveOrUpdate(oModel2);
t.Commit();
}
//DAO will use same _Session to get data from DB
DAO.GetModel3FromDB();
DAO.AddHistoryInDB();
AddHistoryInDB 只是创建一个新模型HISTORY 并将其提交到数据库中。模型HISTORY 只需要来自之前的Model1 的CaseID。
在保存HISTORY 时,某些情况下没有保存history。
此函数将使用相同的 _session 和新事务向 DB 发送数据
只是想知道我在历史函数DAO.AddHistoryInDB() 中将数据插入数据库的方法是否正确。 ?
编辑:
以下是例外:
Unable to add case history.
MySql.Data.MySqlClient.MySqlException (0x80004005):
Can not modify more than one base table through a join view
'easyslotdb.view_appointment' at MySql.Data.MySqlClient.MySqlStream.ReadPacket() at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId) at
MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at
MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() at
NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd) at
NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation expectation) at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
据我了解,当我们更新数据库视图时会发生这种情况,但在我的情况下我没有更新它。任何人都可以帮忙吗?
【问题讨论】:
标签: c# mysql asp.net-mvc database nhibernate