Я использую Nhibernate вместе с LINQ, и у меня есть несколько проблем. Скажем, у меня есть следующие объекты:
public class User
{
public virtual int UserID { get; set; }
public virtual bool IsActive { get; set; }
public virtual bool SomeField { get { return 0; } }
public virtual DateTime DateRegistered { get; set; }
public virtual IList<Membership> Membership { get; set; }
public virtual Membership ValidMembership { get { return Membership.FirstOrDefault(m => m.IsValid); } }
}
public class User2
{
public virtual int UserID { get; set; }
public virtual int MembershipID { get; set; }
}
public class Membership
{
public virtual int MembershipID { get; set; }
public virtual bool IsValid { get; set; }
}
Теперь, если я выполню следующий запрос:
var users = service.Linq<User>()
.Where(u => u.IsActive) // This would work
.Where(u => u.SomeField > 0) // This would fail (i know i can map these using formulas but this is here to illustrate)
.Where(u => u.Membership.Any(m => m.IsValid)) // This would work
.Where(u => u.ValidMembership != null) // This would fail
.Where(u => u.DateRegistered > DateTime.UtcNow.AddDays(-1)) // This would work
.Where(u => u.DateRegistered.AddDays(1) > DateTime.UtcNow) // This would fail
.Select(u => new User2 { UserID = u.UserID }) // This would work
.Select(u => u.UserID) // This would work
.Select(u => new { UserID = u.UserID }) // This would fail
.Select(u => new User2 { UserID = u.UserID, MembershipID = u.Membership.Any(m => m.IsValid) ? u.Membership.Any(m => m.IsValid).First().MembershipID : 0 }); // This would fail
Я добавил комментарий рядом с каждым, чтобы указать, сработают они или нет. Это те сценарии, о которых я могу подумать в данный момент. Мне удалось преодолеть эти проблемы, преобразовав данные в список, прежде чем он сделает что-то слишком причудливое. Это, очевидно, влияет на производительность. Мне было интересно, будут ли их поддерживать будущие версии поставщика LINQ для NHibernate? Также кто-нибудь знает, как структура сущностей будет обрабатывать эти сценарии. Я полагаю, что структура сущностей будет улучшением, но я не хочу прыгать с корабля, если существуют такие же проблемы.
ценим ваши отзывы. Спасибо