MsSQL2012 には、次のように作成した 2 つのテーブルを含む単純なデータベースがあります。
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; }
}
デパートメント
[ActiveRecord]
public class Department : ActiveRecordBase<Department>
{
[PrimaryKey]
public int Id { get; set; }
[Property]
public string Name { get; set; }
[HasMany(typeof(Employee))]
public IList<Employee> Employees { get; set; }
[BelongsTo(Type = typeof(Company), Column = "Id")]
public Company Company
{
get; set;
}
}
会社と部門を取得する C# コード:
ActiveRecordStarter.Initialize(ActiveRecordSectionHandler.Instance, typeof(Company), typeof(Department));
var companys = Company.FindAll();//ALL IS FINE, I get a list of companies
var departments = Department.FindAll();//HERE IS EXCEPTION
例外:
未処理の例外: Castle.ActiveRecord.Framework.ActiveRecordException: 部門の FindAll を実行できませんでした ---> NHibernate.ObjectNotFoundException: 指定された識別子を持つ行が存在しません [ActiveRecordDemo.Domain.Company#4]
NHibernate.Impl.SessionFactoryImpl.DefaultEntityNotFoundDelegate.HandleEntityNotFound (文字列エンティティ名、オブジェクト ID) で NHibernate.Event.Default.DefaultLoadEventListener.Load (LoadEvent イベント、IEntityPersister 永続化、EntityKey keyToLoad、LoadType オプション) で NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad (LoadEvent イベント、IEntityPersister 永続化、EntityKey keyToLoad、LoadType オプション) NHibernate.Impl.Impl. NHibernate.Type.Type.EntityType.ResolveIdentifier(オブジェクト ID、ISessionImplementor セッション) の SessionImpl.InternalLoad(String entityName、オブジェクト ID、ブール値の熱心な、ブール値の isNullable)。NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList hydredObjects, Object NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor セッション、QueryParameters queryParameters、ブール型 returnProxies) の NHibernate.Loader.Loader.DoQuery(ISessionImplementor セッション、QueryParameters queryParameters、ブール型 returnProxies) NHibernate.Loader.Loader の .DoList(ISessionImplementor セッション、QueryParameters queryParameters)。NHibernate.Loader.Loader.List(ISessionImplementor セッション、QueryParameters queryParameters、ISet の ListIgnoreQueryCache(ISessionImplementor セッション、QueryParameters queryParameters)1 querySpaces, IType[] resultTypes) at NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor session) at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) at NHibernate.Impl.CriteriaImpl.List(IList results) at NHibernate.Impl.CriteriaImpl.List() at Castle.ActiveRecord.ActiveRecordBase.FindAll(Type targetType, DetachedCriteria detachedCriteria, Order[] orders) --- End of inner exception stack trace --- at Castle.ActiveRecord.ActiveRecordBase.FindAll(Type targetType, DetachedCriteria detachedCriteria, Order[] orders) at Castle.ActiveRecord.ActiveRecordBase.FindAll(Type targetType) at Castle.ActiveRecord.ActiveRecordBase
1.FindAll()
会社を取得するとすべて問題ありませんが、部門を取得すると上記の例外が発生します。どこで間違えた?