流畅的NHibernate表每个类层次结构需要使用.Where()?

时间:2009-10-29 01:17:03

标签: nhibernate fluent-nhibernate

基于抽象的Contact类实现,我有一组联系人类的映射。

   public class ContactMapping : ClassMap<Contact> {
        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<PhoneContact> {
        public PhoneContactMapping() {
            Map(p => p.PhoneType);
            DiscriminatorValue("PhoneContact");
        }
    }
    public class EmailContactMapping : SubclassMap<EmailContact> {
        public EmailContactMapping() {
            DiscriminatorValue("EmailContact");
        }

    }
    public class WebsiteContactMapping : SubclassMap<WebsiteContact> {
        public WebsiteContactMapping() {
            DiscriminatorValue("WebsiteContact");
        }
    }

我有一个实体类,包括HasMany EmailContact(s),WebsiteContact(s)和PhoneContact(s)。

public class ContactableEntityMapping: ClassMap<ContactableEntity> {
    public ContactableEntityMapping() {
        Id(x => x.Id).GeneratedBy.GuidComb();
        Map(x => x.CreatedDate).Not.Nullable();
        Map(x => x.Comment);
        HasMany<EmailContact>(x => x.EmailContacts).AsBag().Not.LazyLoad().Where("ContactType='EmailContact'");
        HasMany<PhoneContact>(x => x.PhoneContacts).AsBag().Not.LazyLoad().Where("ContactType='PhoneContact'");
        HasMany<WebsiteContact>(x => x.WebsiteContacts).Not.LazyLoad().AsBag().Where("ContactType='WebsiteContact'");
        HasManyToMany(x => x.Addresses).AsSet();
    }
}

如果我没有在那里指定.Where()子句,如果使用了LazyLoading,那么最后会返回所有映射到EmailContact的行(因为它是列表中的第一个),如果没有使用延迟加载,我会收到尝试将类转换为错误类型时的异常。

显然这是因为执行的SQL没有传入附加的where子句,除非我在映射中指定它。我在我的地图中遗漏了什么,或者我们需要住的地方是什么?

感谢您的帮助!

0 个答案:

没有答案