Nhibernate 3.3을 사용하여 Sybase Ase 15 데이터베이스에 연결합니다. 제한 (또는 상단)을 지원하지 않는 경우를 제외하고는 모두 괜찮습니다. sybase에서는 구현되지만 Nhibernate에서는 구현되지 않습니다. 해결책이 있습니까? Nhibernate 및 Sybase와 함께 한계를 구현하는 방법
은 내가이 변경하려면 CustomSybaseAse15Dialect 만들려고 다음 Linq2Nhibernate 구문을 사용 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'");
}
를, 그것은
Session.Query<product>().First()
제한과 좋은 올바르게 1로 설정되어 작동하지만 나는이
을 할 경우Session.Query<product>().Take(3).ToList()
"?"로 제한됩니다.
어떻게해야합니까?
이 될 것 같다 (SupportsLimit는 그것을 기본값 무엇에) "위에 X를 선택"의 자리에 대한 지원의 부족을 해결하기 위해 nHibernate 내에서 문제가 발생했습니다. https://groups.google.com/forum/?fromgroups=#!topic/nhibernate-development/TZVi8ce_Vfo – MoCapitan
을 확인 했습니까? 나는 sybase로 문제에 집중했지만 당신이 옳다고 생각합니다. 수정 사항이나 가능한 해결 방법으로 바이너리를 얻는 방법을 알고 있습니까? – Eric