gpt4 book ai didi

linq - NHibernate LINQ 查询抛出错误 "Could not resolve property"

转载 作者:行者123 更新时间:2023-12-04 23:23:38 26 4
gpt4 key购买 nike

我正在测试将 LINQ 与 NHibernate 结合使用,但在解析 string.length 时遇到了一些问题。我有以下内容

public class DC_Control
{
public virtual int ID { get; private set; }
public virtual string Name { get; set; }
public virtual bool IsEnabled { get; set; }
public virtual string Url { get; set; }
public virtual string Category { get; set; }
public virtual string Description { get; set; }
public virtual bool RequireScriptManager { get; set; }
public virtual string TriggerQueryString { get; set; }
public virtual DateTime? DateAdded { get; set; }
public virtual DateTime? DateUpdated { get; set; }
}

public class DC_ControlMap : ClassMap<DC_Control>
{
public DC_ControlMap()
{
Id(x => x.ID);
Map(x => x.Name).Length(128);
Map(x => x.IsEnabled);
Map(x => x.Url);
Map(x => x.Category);
Map(x => x.Description);
Map(x => x.RequireScriptManager);
Map(x => x.TriggerQueryString);
Map(x => x.DateAdded);
Map(x => x.DateUpdated);
}
}

private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2008)
.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
.ExposeConfiguration(c => c.SetProperty("connection.connection_string", "CONNSTRING"))
.ExposeConfiguration(c => c.SetProperty("proxyfactory.factory_class", "NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle"))
.BuildSessionFactory();
}

public static void test()
{
using (ISession session = sessionFactory.OpenSession())
{
var sqlQuery = session.CreateSQLQuery("select * from DC_Control where LEN(url) > 80").AddEntity(typeof(DC_Control)).List<DC_Control>();

var linqQuery= session.Linq<DC_Control>().Where(c => c.Url.Length > 80).ToList();
}
}

在我的测试方法中,我首先尝试使用 SQL 执行查询,这工作得很好。然后我想在 LINQ 中做同样的事情,它抛出以下错误:

NHibernate.QueryException: could not resolve property: Url.Length of: DC_Control

我搜索了很多关于“无法解析属性”的错误,但我不太明白这意味着什么。这是因为 LINQ 实现不完整吗?如果是这样,那么来自 Linq2Sql 的功能就有点令人失望了。

我还尝试使用 hbm.xml 设置映射而不是使用 FluentNHibernate,但它产生了同样的错误。

最佳答案

旧的 (2.x) Linq 提供程序不支持 String.Length 投影。

集成了 NHibernate 3.x 中新的 Linq 提供程序;您无需下载任何额外内容。

新的扩展方法是session.Query而不是session.Linq;如果您使用的是后者,那么您仍在使用旧的提供程序。

关于linq - NHibernate LINQ 查询抛出错误 "Could not resolve property",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2779116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com