草庐IT

Fluent-NHibernate

全部标签

c# - 等于 NHibernate 实体的实现,unproxy 问题

在NHibernate3.0Cookbook中,有一个基本实体类型的示例实现。equals是这样实现的:publicabstractclassEntity{publicvirtualTIdId{get;protectedset;}publicoverrideboolEquals(objectobj){returnEquals(objasEntity);}privatestaticboolIsTransient(Entityobj){returnobj!=null&&Equals(obj.Id,default(TId));}privateTypeGetUnproxiedType(){re

c# - NHibernate 一对一映射

我是NHibernate的新手,所以到目前为止对映射等的了解有限,我刚刚遇到了一个需要帮助的场景。我有2个表:评论标记评论我有2个类,如下所示(为简洁起见,我排除了不重要的属性):回顾publicvirtualintReviewId{get;set;}publicvirtualTaggedReviewTaggedReview{get;set;}publicvirtualstringTitle{get;set;}publicvirtualstringDescrip{get;set;}标签评论publicvirtualintReviewId{get;set;}publicvirtualRe

c# - nHibernate session 和多线程

我有一个方法有很多使用nHibernatesession的持久性调用,它有效,没问题。但出于多线程原因,我需要重构此方法,从循环内的内容中提取方法。然后我用这个方法创建了一个类。这就像一个正常的重构,但是这个方法调用中的nHibernatesession被破坏了,没有上下文,我没有在任何时候完成它。nHibernate是否存在多线程问题?即使我只执行一个线程,我也会遇到同样的问题。我通过SessionFactory和Façade模式使用nHibernateSession,这意味着,session不是这些对象的字段,它在SessionFactory中是全局的。让它更清晰一点:之前:Met

c# - 你如何让 NHibernate 忽略 POCO 中的属性

我们有POCO,比如:publicclassPerson{publicGuidPersonID{get;set;}publicstringFirstName{get;set;}publicstringLastName{get;set;}publicDateTimeDateOfBirth{get;set;}publicstringVersion{get;set;}}而对应的hbm文件为如果仔细观察,我们有一个Version属性,数据库中没有对应的列?我们只是想让nHibernate忽略这个属性,这就是我们没有把这个属性放在映射文件中的原因。但是它开始抛出错误。有办法解决这个问题吗?

c# - 记录 NHibernate SQL 查询

有没有办法在我的代码中访问完整的SQL查询,包括值?我能够使用log4net记录SQL查询:但是,我也想找到一种方法来从代码中记录SQL查询。这样,我将在我的try/catch语句中记录导致异常的特定SQL查询。现在我必须对SQLFileLog进行数据挖掘,以在发生异常时找到导致异常的查询,但效率不高。 最佳答案 你可以使用拦截器来做到这一点:publicclassLoggingInterceptor:EmptyInterceptor{publicoverrideSqlStringOnPrepareStatement(SqlStri

c# - NHibernate 无状态 session 的插入很慢

这几天我一直致力于改进NHibernateInsert性能。我在很多帖子(例如thisone)中读到,statelesssession可以每秒插入1000~2000条记录....然而,它可以插入1243条记录的最佳时间对我来说超过9秒:varsessionFactory=newNHibernateConfiguration().CreateSessionFactory();using(IStatelessSessionstatelessSession=sessionFactory.OpenStatelessSession()){statelessSession.SetBatchSize

c# - 帮助 QueryOver 和 WhereExists

我有一个问题。我有人和猫。每个人都有一些猫(猫中有一个外键指向人中的主键)。每只猫都有一个年龄。我想选择拥有“老”猫的人。我想要这些人的所有猫,而不仅仅是“老”猫。我需要使用QueryOver语法来完成。在T-SQL中它会是这样的:SELECTP.*,C.*FROMPersonsPLEFTJOINCatsCONP.Id=C.OwnerIdWHEREEXISTS(SELECT1FROMCatsC2WHEREP.Id=C2.OwnerIdANDC2.Age>5)我知道我必须使用子查询,并且我可以轻松地使用“旧的”nhibernate语法(Criteria/DetachedCriteria)

c# - Fluent NHibernate 生成和分配的 ID 列

我在Web应用程序中使用FluentNHibernate进行数据持久化。我的问题...我有一个基类,它使用GeneratedBy().Identity()映射所有具有T类型ID属性(几乎总是int或GUID)的实体在应用程序启动时,我有一个Bootstrap来检查和验证所需的种子数据是否已填充。我的问题是,一些填充的种子数据需要一个特定的ID。(对应于枚举或系统用户的ID)有什么方法可以强制NHibernate使用我指定的ID提交记录,而不是使用自动生成的ID?此后对存储库的任何其他提交都可以自动生成。 最佳答案 Id(x=>x.I

c# - Fluent Assertions 能否对 IEnumerable<string> 使用不区分字符串的比较?

我有一对列表,我正在尝试使用FluentAssertions进行比较。我可以很容易地编写比较代码,但我想使用FluentAssertions,这样我就可以获得在测试失败消息中显示的原因。到目前为止,我所看到的一切似乎都在使用默认的Object.Equals比较,它区分大小写。我似乎无法将IComparer传递给Equal或Contains方法,还有其他方法吗?[TestMethod()]publicvoidfoo(){varactual=newList{"ONE","TWO","THREE","FOUR"};varexpected=newList{"One","Two","Three"

c# - 使用 Entity Framework Fluent 语法或内联语法编写递归 CTE

我不熟悉SQL和EntityFramework(ADO.NET实体映射)中的这种递归。我正在处理评论管理,其中有一个Comments表,该表包含列NewsID、CommentID、ParentCommentID、IndentLevel、CreatedTime。我正在尝试获取特定新闻项的评论列表,其中所有评论都是根据父项下的子项和创建时间排列的,如下所示:CommentID|time|ParentCommentIDGuid1|t1|nullGuid4|t4|Guid1Guid2|t2|nullGuid3|t3|Guid2必须优先考虑子父关系,然后是创建时间。到目前为止我学到的是(来自互联