我们使用Nhibernate 3.3连接到Sybase Ase 15数据库。一切都很好,除了限制(或顶部)的不支持。它在sybase中实现,但不在Nhibernate中实现。 你有解决方案吗?如何使用Nhibernate和Sybase实现限制
我试图创造,我改变这个CustomSybaseAse15Dialect:
public override bool SupportsLimitOffset
{
get { return true; }
}
public override SqlString GetLimitString(SqlString sql, SqlString offset, SqlString limit)
{
int insertionPoint = GetAfterSelectInsertPoint(sql);
if (insertionPoint > 0)
{
SqlStringBuilder limitBuilder = new SqlStringBuilder();
limitBuilder.Add("select");
if (insertionPoint > 6)
{
limitBuilder.Add(" distinct ");
}
limitBuilder.Add(" top ");
limitBuilder.Add(limit);
if (offset != null)
{
limitBuilder.Add(" start at ");
limitBuilder.Add(offset);
}
limitBuilder.Add(sql.Substring(insertionPoint));
return limitBuilder.ToSqlString();
}
else
{
return sql; // unchanged
}
}
/// <summary>
/// Copied from MsSql2000Dialect.
/// </summary>
private int GetAfterSelectInsertPoint(SqlString sql)
{
if (sql.StartsWithCaseInsensitive("select distinct"))
{
return 15;
}
if (sql.StartsWithCaseInsensitive("select"))
{
return 6;
}
throw new NotSupportedException("The query should start with 'SELECT' or 'SELECT DISTINCT'");
}
使用Linq2Nhibernate语法,它的工作好与
Session.Query<product>().First()
限制正确设置为1,但如果我这样做
Session.Query<product>().Take(3).ToList()
限制设置为“?”。
我该怎么办?
似乎有一个问题在nHibernate中。您是否检查了https://groups.google.com/forum/?fromgroups=#!topic/nhibernate-development/TZVi8ce_Vfo – MoCapitan 2013-05-10 09:24:26
正确!我专注于sybase的问题,但我认为你是对的。你知道我怎么能得到更正的二进制文件或可能的解决方法? – Eric 2013-05-10 09:52:30