有没有办法使用NHibernate将枚举持久保存到数据库?这是一个包含代码和枚举中每个值的名称的表.
我想保留没有实体的枚举,但仍然有一个从所有其他引用实体到枚举表的外键(枚举的int表示).
我有一个空的 app.config文件,但我仍然得到NHibernate调试日志
NHibernate: SELECT this_.LogID as LogID71_0_, this_.Level as Level71_0_, this_.Message as Message71_0_, this_.EventTime as EventTime71_0_, this_.Component as ...
Run Code Online (Sandbox Code Playgroud)
我尝试添加一个带有ERROR日志级别的log4net配置,但没有用.如何停止这些日志消息?
我很困惑的是,如果我有一个空的app.config,为什么这些出现在第一位.对我来说没有意义,我必须配置它不打印这些消息 - 默认应该关闭.可能是我的代码以某种方式以编程方式设置它们吗?我应该寻找什么?
嗨当我使用查询转换API时,是否有任何优雅的方式组合'喜欢'和'或'?对于'喜欢'有类似的东西:
query.WhereRestrictionOn(x=>x.Code).IsLike(codePart)
Run Code Online (Sandbox Code Playgroud)
对于'或'我可以做类似的事情:
query.Where( x=>x.Code == codePart || x.Description== codePart)
Run Code Online (Sandbox Code Playgroud)
但是如何创建这样的查询:
select*from n,其中代码如'%abc%'或描述如'%abc%'
我有一个映射的方式.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Model.Entities" schema="etl" assembly="Model" default-lazy="false">
<class name="Model.Entities.DataField, Model" table="mdm_field">
<id name="FieldId" column="field_id" type="int">
<generator class="native" />
</id>
<many-to-one name="KeyField" class="Model.Entities.Key, Model" column="field_id" />
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
现在在数据库中,mdm_field表中的field_id有时具有相关key_field表中不存在的值,因此它基本上是破坏了引用完整性.因为当我加载实体时,我得到一个错误"没有给定标识符的行存在".如何配置映射以适应这种情况,以便在这种情况下不会死亡.
如何配置Fluent NHibernate将查询输出到Trace或Debug而不是Console?我正在使用,MsSqlConfiguration.MsSql2008.ShowSql()但它没有参数,我在谷歌上找不到任何东西.
使用MiniProfiler对NHibernate进行数据库分析的最简单方法是什么?为了让探查器工作,我需要包装DbConnectionNHibernate在a中使用的ProfiledDbConnection.
我不太熟悉NHibernate的内部,所以我不知道所有的可扩展性点在哪里.(我注意到NHibernate ISession有一个Connection属性,但它是只读的.)
我有这个Repository方法
public IList<Message> ListMessagesBy(string text, IList<Tag> tags, int pageIndex, out int count, out int pageSize)
{
pageSize = 10;
var likeString = string.Format("%{0}%", text);
var query = session.QueryOver<Message>()
.Where(Restrictions.On<Message>(m => m.Text).IsLike(likeString) ||
Restrictions.On<Message>(m => m.Fullname).IsLike(likeString));
if (tags.Count > 0)
{
var tagIds = tags.Select(t => t.Id).ToList();
query
.JoinQueryOver<Tag>(m => m.Tags)
.WhereRestrictionOn(t => t.Id).IsInG(tagIds);
}
count = 0;
if(pageIndex < 0)
{
count = query.ToRowCountQuery().FutureValue<int>().Value;
pageIndex = 0;
}
return query.OrderBy(m => m.Created).Desc.Skip(pageIndex * pageSize).Take(pageSize).List();
}
Run Code Online (Sandbox Code Playgroud)
您提供自由文本搜索字符串和标签列表.问题是,如果邮件有多个标签,则会列出重复的时间.我想要一个基于Message实体的独特结果.我看了看
Projections.Distinct
Run Code Online (Sandbox Code Playgroud)
但它需要一个属性列表来处理不同的问题.这条消息是我的实体根,大部分是在不提供所有实体属性的情况下获得此行为的方法吗?
提前谢谢,安德斯
我会像这样创建一个QueryOver
SELECT *
FROM Table
WHERE Field IN (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
我尝试过Contains方法,但我遇到了异常
"System.Exception:无法识别的方法调用:System.String:Boolean包含(System.String)"
在这里我的代码
var qOver = _HibSession.QueryOver<MyModel>(() => baseModel)
.JoinAlias(() => baseModel.Submodels, () => subModels)
.Where(() => subModels.ID.Contains(IDsSubModels))
.List<MyModel>();
Run Code Online (Sandbox Code Playgroud) NHibernate和Entity Framework 4.0的主要优点和缺点是什么?
(在标记我的问题时,我注意到了比EF更多的NHibernate标签.NMibernate更受欢迎吗?)
我已经看到了一些decimal在NHibernate项目中使用的示例,用于映射到Oracle中的整数列.现在,我使用int,并long在我的计划.
decimalover int/ long?有什么好处?它表现更好吗?
nhibernate ×10
c# ×5
queryover ×3
.net ×1
asp.net ×1
enums ×1
foreign-keys ×1
log4net ×1
logging ×1
oracle ×1
oracle10g ×1
orm ×1
persistence ×1
where-in ×1