1

我试图让一个基于 S#arp 架构的网络应用程序工作。目前,我的实体有以下代码。

[Serializable]
public abstract class EventBase : Entity
{
    #region Properties

    [DomainSignature]
    public virtual string Name { get; set; }

    public virtual string Description { get; set; }

    public virtual AgeRange Ages { get; set; }

    public virtual int Rating { get; set; }

    public virtual decimal Price { get; set; }

    public virtual string PhoneNumber { get; set; }

    public virtual string EmailAddress { get; set; }

    public virtual string Website { get; set; }

    public virtual EventState State { get; set; }

    #endregion

    protected EventBase() {}

    protected EventBase(string name, string description)
    {
        // ReSharper disable DoNotCallOverridableMethodsInConstructor
        Name = name;
        Description = description;
        Price = 0;
        State = EventState.New;
        // ReSharper restore DoNotCallOverridableMethodsInConstructor
    }
}

这是使用 Fluent NHibernate 映射的,如下所示

public class EventBaseMap : AutoMap<EventBase>
{
    public EventBaseMap()
    {
        Id(x => x.ID).WithUnsavedValue(-1).GeneratedBy.Identity();

        Component<AgeRange>(x => x.Ages, m =>
         {
             m.Map(x => x.From).TheColumnNameIs("AgeFrom");
             m.Map(x => x.To).TheColumnNameIs("AgeTo");
         });

        JoinedSubClass<Music>("EventId", sub =>
         {
             sub.Map(x => x.Headliner);
         });
    }
}

我使用非常有用的 S#arp 基础存储库类创建了一个非常简单的存储库。

public interface IEventRepository : INHibernateRepositoryWithTypedId<EventBase, int>
{
    List<EventBase> FindByName(string searchPhase);
}
public class EventRepository : NHibernateRepository<EventBase>, IEventRepository
{
    public List<EventBase> FindByName(string searchPhase)
    {
        return Session.Linq<EventBase>().Where(x => x.Name == searchPhase).ToList();
    }
}

我可以在数据库中创建实体并返回所有记录。当我尝试测试 FindByName 方法时,出现以下错误。

NHibernate.QueryException:无法解析属性:名称:Model.Events.EventBase

有没有人有任何想法?是我的映射有问题吗?

谢谢,

4

1 回答 1

1

这是使用自动映射功能。我以为您只显式映射要覆盖或不符合约定的属性?

如果我添加一个显式映射,这可以解决问题,但我仍然不确定为什么。

于 2009-01-31T23:26:06.810 回答