Nhibernateで作成しようとしているクエリ:
SELECT _Eligible_Claims.ClaimID, _Eligible_Claims.DateFilled, _Eligible_Claims.NDC, _Eligible_Claims.Cost
From _Eligible_Claims
INNER JOIN _Files_Claims ON _Files_Claims.FileID = _Eligible_Claims.FileID
_Eligible_Claimsはビューであり(したがって、キーはありません)、_Files_ClaimsのPKは「FileID」です。
Eligible_Claimsマップ:
public EligibleClaimsMap()
{
ReadOnly();
Table("_Eligible_Claims");
Id(x => x.UniqueIdentifier, "Id")
.GeneratedBy.Guid();
Map(x => x.ApplicationID, "ApplicationID")
.Not.Nullable();
Map(x => x.BenOp, "BenOp")
.Not.Nullable();
Map(x => x.BenOpID, "BenOpID")
.Not.Nullable();
Map(x => x.MemberID, "MemberID")
.Nullable();
Map(x => x.ClaimID, "ClaimID")
.Not.Nullable();
Map(x => x.NDC, "NDC")
.Not.Nullable();
Map(x => x.DateFilled, "DateFilled")
.Not.Nullable();
Map(x => x.Cost, "Cost")
.Not.Nullable();
Map(x => x.DrugID, "DrugId")
.Nullable();
Map(x => x.CategoryID, "CategoryId")
.Nullable();
Map(x => x.FileID, "FileID")
.Not.Nullable();
}
_Files_Claimsマッピング:
public ClamFileMap()
{
Table("_Files_Claims");
Id(x => x.ID, "FileID")
.CustomType<UintToInt>()
.GeneratedBy.Identity();
Map(x => x.Filename, "FileName")
.Not.Nullable();
Map(x => x.Size, "FileSize")
.Not.Nullable();
Map(x => x.DateCreated, "DateCreated")
.Not.Nullable();
Map(x => x.DateEntered, "DateEntered")
.Not.Nullable();
Map(x => x.ClientID, "ClientID")
.Not.Nullable()
.CustomType<UintToInt>();
Map(x => x.MasterTable, "MasterTable")
.Nullable();
Map(x => x.GUID, "GUID")
.Nullable();
Map(x => x.Protected, "Protected")
.Not.Nullable();
Map(x => x.BatchTimeStamp, "BatchTimeStamp")
.Nullable();
Map(x => x.ApplicationID, "ApplicationID")
.Nullable();
Map(x => x.ClaimCount, "Claims")
.Not.Nullable();
Map(x => x.TotalCost, "ClaimCost")
.Not.Nullable();
Map(x => x.PackageID, "PackageID")
.Nullable();
Map(x => x.TempDate, "TempDate")
.Nullable();
Map(x => x.Renamed, "Renamed")
.Not.Nullable();
Map(x => x.ERRPPackage, "ERRPPackage")
.Not.Nullable();
Map(x => x.Removed, "Removed")
.Not.Nullable();
Map(x => x.RemovedBy, "RemovedBy")
.Nullable();
Map(x => x.RemovedDate, "RemovedDate")
.Nullable();
Map(x => x.ImportedBy, "ImportedBy")
.Nullable();
Map(x => x.ImportedDate, "ImportedDate")
.Nullable();
Map(x => x.ControlTotal, "ControlTotal")
.Nullable();
}
私の現在のアプローチ:
var query = session.CreateCriteria<EligibleClaims>()
.CreateAlias("ClaimFile", "claimFile", NHibernate.SqlCommand.JoinType.InnerJoin);
デフォルトでClaimFileのFKにあるEligibleClaimsのPKに参加しようとしないため、これが機能することは期待できません。「CreateAlias」メソッドには、「withClause」と呼ばれる「ICriterion」の4番目のパラメーターのオーバーロードがあることに気付きました。それを実装する方法はありますか?それとも、別の角度からこれにアプローチする必要がありますか?