我是NHibernate和FluentNHibernate的新手。我試圖找出在不同模式中的表之間設置映射的最佳方式,並且可能會在映射中進行一些過濾。帶過濾器的FluentNHibernate映射,有可能嗎?
在我的情況下,我有醫生與醫院聯繫,醫生可以與多家醫院聯繫。在某些醫院,醫生可能會被列入黑名單,執行某些程序。還有很多黑名單,我只對那些黑名單類型爲零的人感興趣。由於這些表位於不同的模式中,並且由不同的IT組管理,因此加入的列名並不總是匹配。我試圖找出映射這種關係的最佳方式。
我有這個工作的一部分,但我不知道如何獲得整個關係設置,以便我只得到醫生有一個特定的黑名單指定的醫院。
下面是我的實體修剪下來的樣子。
public class Doctor
{
pubilc virtual int DoctorId { get; set; }
public virtual string Name { get; set; }
public virtual IList<BlackListSite> BlackListedSites { get; set; }
}
public class BlackListSite
{
public virtual int DoctorId { get; set; }
public virtual int HospitalId { get; set; }
public virtual int ProcedureId { get; set; }
public virtual int BlackListTypeId { get; set; }
public virtual IList<Facility> Facilities { get; set; } //these are the hospitals
}
public class Facility //this represents a hospital
{
public virtual int FacilityId{ get; set; }
public virtual string Name { get; set; }
}
下面是我如何映射BlackListSite和醫院,這是工作。
public class BlackListSitesMap : ClassMap<BlackListSites>
{
public BlackListSitesMap()
{
Schema("schema1");
Table("RestrictedDoctors");
Id(x => x.BlackListId).GeneratedBy.Identity();
Map(x => x.DoctorId);
Map(x => x.HospitalId);
Map(x => x.Status);
HasMany(x => x.Facilities).Cascade.All().Not.LazyLoad()
.KeyColumns.Add("HospitalID",
mapping => mapping.Name("FacilityID"));
}
}
public class FacilityMap : ClassMap<Facility>
{
public FacilityMap()
{
Schema("schema2");
Table("Facility");
Id(x => x.FacilityId);
Map(x => x.Name);
Map(x => x.Active);
}
}
這樣的查詢讓我列入黑名單的網站的列表,黑名單類型爲0
public void TestBlackList()
{
using (var session = SessionManager.Session())
{
var blacklist = session.Query<BlackListSites>().
Where(b => b.DoctorId == 1 && b.HospitalId != null
&& b.Status == 0).ToList();
}
}
我不知道如何配合的列入黑名單的網站,以醫生,這樣,當我要求一位醫生,我得到一份醫生被黑名單列入黑名單的網站列表。有任何想法嗎?
如果我不能在映射上做到這一點,我可以以某種方式在Doctor上設置查詢來過濾BlackListTypeId = 0的黑名單嗎?無論如何,這可能是最理想的。它會讓我在將來要求其他黑名單類型。