Беглую иерархию таблиц для каждого класса нужно использовать .Where ()?
У меня есть следующее отображение для набора классов контактов, основанных на абстрактной реализации класса контактов.
public class ContactMapping : ClassMap {
public ContactMapping() {
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.CreatedDate).Not.Nullable();
Map(x => x.Value).Not.Nullable();
Map(x => x.Level).Not.Nullable();
Map(x => x.Comments);
DiscriminateSubClassesOnColumn("ContactType");
}
}
public class PhoneContactMapping : SubclassMap {
public PhoneContactMapping() {
Map(p => p.PhoneType);
DiscriminatorValue("PhoneContact");
}
}
public class EmailContactMapping : SubclassMap {
public EmailContactMapping() {
DiscriminatorValue("EmailContact");
}
}
public class WebsiteContactMapping : SubclassMap {
public WebsiteContactMapping() {
DiscriminatorValue("WebsiteContact");
}
}
У меня есть класс сущности HasMany EmailContact (s), WebsiteContact (s) и PhoneContact (s).
public class ContactableEntityMapping: ClassMap {
public ContactableEntityMapping() {
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.CreatedDate).Not.Nullable();
Map(x => x.Comment);
HasMany(x => x.EmailContacts).AsBag().Not.LazyLoad().Where("ContactType='EmailContact'");
HasMany(x => x.PhoneContacts).AsBag().Not.LazyLoad().Where("ContactType='PhoneContact'");
HasMany(x => x.WebsiteContacts).Not.LazyLoad().AsBag().Where("ContactType='WebsiteContact'");
HasManyToMany(x => x.Addresses).AsSet();
}
}
Если я не укажу там предложения .Where (), класс в конечном итоге возвращается со всеми строками, сопоставленными с EmailContact (поскольку он первый в списке), если используется LazyLoading и если не используется отложенная загрузка, я получаю исключение как он пытается привести классы к неправильному типу.
Очевидно, это потому, что выполняемый SQL не передается в дополнительном предложении where, если я не укажу его в отображении. Я что-то упускаю в своем отображении, или беспорядок Where - это то, с чем нам нужно жить?
Спасибо за помощь! Я