【发布时间】:2011-04-25 19:17:53
【问题描述】:
运行时出现异常:Unrecognised method call in epression a.B.Count():
var query = session.QueryOver<A>()
.Where(a => a.B.Count() > 0)
.List();
以下代码有效:
var query1 = session.QueryOver<A>().List();
var query2 = query1.Where(a => a.B.Count() > 0);
有什么想法吗?谢谢。
编辑:
这是我的映射。我正在使用 NHibernate 3.1.0.4000:
型号:
public class A
{
public virtual int Id { get; private set; }
public virtual ICollection<B> Bs { get; set; }
}
public class B
{
public virtual int Id { get; private set; }
}
映射:
public class AMappings : ClassMap<A>
{
public AMappings()
{
Id(x => x.Id);
HasMany(x => x.Bs).LazyLoad();
}
}
public class BMappings : ClassMap<B>
{
public BMappings()
{
Id(x => x.Id);
}
}
我的其余代码:
class Program
{
static void Main(string[] args)
{
// Create connection string
string connectionString = new System.Data.SqlClient.SqlConnectionStringBuilder()
{
DataSource = @".\r2",
InitialCatalog = "TestNHibernateMappings",
IntegratedSecurity = true
}.ConnectionString;
// Create SessionFactory
ISessionFactory sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration
.MsSql2008.ConnectionString(connectionString)
.ShowSql())
.Mappings(m => m.FluentMappings
.Add(typeof(AMappings))
.Add(typeof(BMappings)))
.ExposeConfiguration(BuildSchema)
.BuildConfiguration()
.BuildSessionFactory();
// Test
var session = sessionFactory.OpenSession();
// This line works OK
var query1 = session.Query<A>()
.Where(a => a.Bs.Count() > 0);
// This line throws exception: Unrecognised method call in epression a.Bs.Count()
var query2 = session.QueryOver<A>()
.Where(a => a.Bs.Count() > 0);
}
static void BuildSchema(Configuration cfg)
{
new SchemaExport(cfg).Create(false, true);
}
}
【问题讨论】:
-
我认为这是第二个示例中的拼写错误,
query.Where应该是query1.Where? -
@pickypg:谢谢,错字已更正。
-
你能展示你的映射吗?你使用什么版本的 NHibernate?
-
@bniwredyc:我正在尝试在另一个项目中复制此问题,然后发布映射。我正在使用 NHibernate 5.1.0.4000。
-
@caveman:你的意思是 3.1.0.4000?请将 A 类的代码及其映射添加到您的问题中。
标签: nhibernate queryover