Activerecord NHibernate.ObjectNotFoundException在尝试检索具有活动记录的行时发生异常

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

我在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,
 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)]