nHibernate v。2.1.2.4、nHibernate.Linq v。1.1.0.1001、およびFluent NHibernate v。1.1.0.685を使用したFluent nHibernate。LINQ to NHibernate:プロパティを解決できませんでした
私はDateOfEventと呼ばれるDateTimeフィールドを持つドメインオブジェクトを持っています。これはデータベースの実際の日付/時刻フィールドです。また、DateOfEventフィールドからYearを取得する2つの新しいプロパティYearOfEventと、DateOfEventフィールドからMonthを取得するMontOfEventを追加しました。しかし
public class Event
{
public Event() { }
public virtual Int32 Id { get; set; }
public virtual String Title { get; set; }
public virtual DateTime DateOfEvent { get; set; }
public virtual Int32 YearOfEvent
{
get { return DateOfEvent.Year; }
}
public virtual Int32 MonthOfEvent
{
get { return DateOfEvent.Month; }
}
public virtual String Location { get; set; }
public virtual String City { get; set; }
public virtual String State { get; set; }
public virtual String Zip { get; set; }
public virtual String Description { get; set; }
public virtual Boolean HasImage { get; set; }
public virtual Boolean IsActive { get; set; }
}
、この方法を実行している:
public IList<Event> GetActiveEvents(int pageNumber, int pageSize, out int totalItems)
{
Int32 skip = Misc.NumberToSkip(pageNumber, pageSize);
totalItems = (from e in _session.Linq<Event>()
where e.IsActive
select e).Count();
return (from e in _session.Linq<Event>()
where e.IsActive
select e)
.Skip(skip)
.Take(pageSize)
.ToList();
}
NHibernate.QueryException:プロパティを解決できませんでした:YearOfEventの:....イベント
FWIW、私はぼやけてきましたプロジェクトの名前。 ;)
どのようにこのクエリを動作させるためのアイデアですか?
ありがとうございます! -Steve
EDIT: ここに私のマッピングクラスがあります:
public class EventMap : ClassMap<Event>
{
public EventMap()
{
Table("tbl_event");
Id(x => x.Id, "eventId");
Map(x => x.DateOfEvent, "dateOfEvent");
Map(x => x.Description, "description");
Map(x => x.Title, "title");
Map(x => x.Location, "location");
Map(x => x.State, "state");
Map(x => x.City, "city");
Map(x => x.Zip, "zip");
Map(x => x.HasImage, "hasImage");
Map(x => x.IsActive, "isActive");
}
}
...と私の設定:
public Configuration GetConfiguration()
{
Configuration configuration;
var assembly = Assembly.Load(".....Data");
var fluentConfig = Fluently.Configure()
.Database(MySQLConfiguration.Standard.ConnectionString(
c => c.FromConnectionStringWithKey("......")
))
.Mappings(m => m.FluentMappings.AddFromAssembly(assembly));
configuration = fluentConfig.BuildConfiguration();
configuration.Properties.Add("hbm2ddl.keywords", "none");
return configuration;
}
私もちょうどクライテリアAPIを試してみました:
return _session.CreateCriteria(typeof (Event))
.Add(Expression.Eq("IsActive", true))
.Add(Expression.Eq("YearOfEvent", year))
.List<Event>();
ワークリーもありません。
あなたのマップを投稿してください –
Strange。私にはうまく見えますが、LINQプロバイダがプロパティで何か魅力的なことをしようとしているのだろうかと思います。 LINQなしで同じクエリを実行しようとしましたか? – Phill
Phill、Criteria APIを使用して試しました。同じ例外です。 – StephenPAdams