Activerecord NHibernate.ObjectNotFoundException在尝试检索具有活动记录的行时发生异常
我在MsSQL2012中有一个简单的数据库,其中有两个表,我创建的如下所示:Activerecord NHibernate.ObjectNotFoundException在尝试检索具有活动记录的行时发生异常,activerecord,castle,Activerecord,Castle,我在MsSQL2012中有一个简单的数据库,其中有两个表,我创建的如下所示: CREATE TABLE Company ( Id int NOT NULL IDENTITY, Name varchar(255), PRIMARY KEY (Id) ) CREATE TABLE Department ( Id int NOT NULL PRIMARY KEY IDENTITY, Name varchar(255), Company_Id int NOT NULL, FOR
CREATE TABLE Company
(
Id int NOT NULL IDENTITY,
Name varchar(255),
PRIMARY KEY (Id)
)
CREATE TABLE Department
(
Id int NOT NULL PRIMARY KEY IDENTITY,
Name varchar(255),
Company_Id int NOT NULL,
FOREIGN KEY (Company_Id) REFERENCES Company(Id)
);
相应的活动记录类别:
公司
[ActiveRecord]
public class Company : ActiveRecordBase<Company>
{
[PrimaryKey]
public int Id { get; set; }
[Property]
public string Name { get; set; }
[HasMany(typeof(Department))]
public IList<Department> Departments { get; set; }
}
异常:
[BelongsTo(Type = typeof(Company), Column = "Id", NotFoundBehaviour = NotFoundBehaviour.Ignore)]
未处理的异常:
Castle.ActiveRecord.Framework.ActiveRecordException:无法执行
部门的FindAll-->NHibernate.ObjectNotFoundException:无行
具有给定标识符的exists[ActiveRecordDemo.Domain.Company#4]在 NHibernate.Impl.SessionFactoryImpl.DefaultEntityNotFoundDelegate.HandleEntityNotFound(字符串 entityName,对象id)位于 NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent 事件,IEntityPersister持久器,EntityKey键加载,加载类型 选项)在 NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent 事件,IEntityPersister持久器,EntityKey键加载,加载类型 选项)在 NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent 事件,LoadType(LoadType)位于 NHibernate.Impl.SessionImpl.FireLoad(LoadEvent事件,LoadType 在NHibernate.Impl.SessionImpl.InternalLoad(字符串 entityName、对象id、布尔值、布尔值可为空)位于 NHibernate.Type.EntityType.ResolveIdentifier(对象id, ISessionImplementor会话)在 NHibernate.Type.EntityType.ResolveIdentifier(对象值, ISessionImplementor会话,对象所有者)位于 NHibernate.Engine.TwoPhaseLoad.InitializeEntity(对象实体,布尔值 只读、ISessionImplementor会话、Preload事件、Preload事件、, PostLoadEvent(PostLoadEvent)位于 NHibernate.Loader.Loader.InitializeEntities和Collections(IList 水合对象、对象结果、ISessionImplementor会话、, 布尔只读)在 NHibernate.Loader.Loader.DoQuery(ISessionImplementor会话, QueryParameters QueryParameters,布尔返回代理)位于 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor 会话,QueryParameters QueryParameters,布尔返回代理)位于 NHibernate.Loader.Loader.DoList(ISessionImplementor会话, 查询参数查询参数)位于 NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor 会话,查询参数查询参数)位于 NHibernate.Loader.Loader.List(ISessionImplementor会话, QueryParameters QueryParameters,ISet
1查询空间,IType[]
结果类型)在
NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor
在NHibernate.Impl.SessionImpl.List(标准实施标准,
在NHibernate.Impl.CriteriaImpl.List(IList结果)中的IList结果)
在NHibernate.Impl.CriteriaImpl.List()处
Castle.ActiveRecord.ActiveRecordBase.FindAll(类型targetType,
DetachedCriteria DetachedCriteria,订单[]订单)---内部订单结束
异常堆栈跟踪---在
Castle.ActiveRecord.ActiveRecordBase.FindAll(类型targetType,
DetachedCriteria DetachedCriteria,订单[]订单)位于
Castle.ActiveRecord.ActiveRecordBase.FindAll(targetType类型)位于
Castle.ActiveRecord.ActiveRecordBase
1.FindAll()
当我得到公司时,一切都正常,但对于检索部门,我得到了上述例外。我在哪里犯了错误?我可以通过添加NotFoundBehavior来消除此异常。忽略参数到BelongsToAttribute:
[BelongsTo(Type = typeof(Company), Column = "Id", NotFoundBehaviour = NotFoundBehaviour.Ignore)]
及
不确定这是一个解决方案还是一个变通方法),但一切正常,所有单元测试都通过了
[BelongsTo(Type = typeof(Company), Column = "Id", NotFoundBehaviour = NotFoundBehaviour.Ignore)]
[BelongsTo(Type = typeof(Department), Column = "Id", NotFoundBehaviour = NotFoundBehaviour.Ignore)]