TLDR:
以下代码在不同的数据库Oracle:
select sysdate from dualSQLite中运行select datetime('now')在
Session.CreateSQLQuery(cmd).UniqueResult<DateTime>()对Oracle 进行操作时,结果是一个DateTime,而在对SQLite进行操作时是一个字符串.感觉就像SQLite驱动程序中的一个错误,以及检查返回类型的hack,如果它是一个字符串,则执行DateTime.Parse().我可以这样做,但是有没有办法让NHibernate返回正确的类型?
我试图从数据库中获取当前数据库时间.它在使用Oracle时工作正常,但是当我尝试对SQLite(在我的单元测试中)时,它会因为返回的日期不是DateTime而是字符串而中断.
我见过使用自定义IUserType的解决方案,但在这种情况下我无法看到我应该如何使用它.有什么建议?
using System;
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using NHibernate.Dialect.Function;
namespace My.Common.Types {
public class MyNHibernateDialectException : Exception {
public MyNHibernateDialectException(string message) : base(message) { }
}
/// <summary>
/// Define all custom functions here by name. It is important that when adding a new custom sql function, that function will work
/// in all dialects supported.
/// </summary>
public static class MyDatabaseDialects { …Run Code Online (Sandbox Code Playgroud) 我有这个代码用他们的孩子获取所有启用的组.我遇到的问题是,孩子们也可以被禁用,但我不能流利的nhibernate只能获取所有孩子都启用的组.我认为这是可能的,但如何?
public class Group {
public bool IsDisabled { get; set; }
public string Description { get; set; }
public ICollection<ChildType> Children { get; protected set; }
}
public class ChildType {
public bool IsDisabled { get; set; }
public string Description { get; set; }
}
public IList<Group> Search(string searchString) {
IQueryOver<Group> query = Session.QueryOver<Group>()
.WhereRestrictionOn(x => x.Description).IsInsensitiveLike(searchString, MatchMode.Start)
.Where(x => !x.IsDisabled)
.OrderBy(x => x.Description).Asc
.Fetch(group => group.Children).Eager;
return query
.Cacheable()
.List();
}
Run Code Online (Sandbox Code Playgroud)
编辑:儿童和群体之间存在N:M关系.
以下是我使用的解决方案:
public …Run Code Online (Sandbox Code Playgroud)