javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

nhibernate-queryover和(x代表'a'或y代表'a')

你好当我使用queryover API时,是否有任何优雅的方式将“ like”和“ or”组合在一起?对于“喜欢”,有一些类似的东西:

 query.WhereRestrictionOn(x=>x.Code).IsLike(codePart)

对于“或”,我可以做类似的事情:

query.Where( x=>x.Code == codePart || x.Description== codePart)

但是如何创建这样的查询:

选择* from n其中代码像   '%abc%'或类似'%abc%'的描述

trans by 2020-01-27T09:23:01Z

禁用NHibernate日志记录

我有一个空的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 ...

我尝试添加具有错误日志级别的log4net配置,但是没有用。 如何停止这些日志消息?

我感到困惑的是,如果我有一个空的app.config,为什么它们会首先出现。 对我而言,我必须对其进行配置以使其不打印这些消息没有意义-默认应为关闭状态。 难道是我的代码以某种方式将它们设置为打开状态? 我应该找什么?

trans by 2020-01-18T07:26:26Z

我怎样才能让NHibernate只生成SQL而不执行它?

我知道如何使用Query<T>()配置选项在运行时将SQL登录到log4net / NLog / trace窗口。

我正在寻找的是一种将Query<T>()提供给NHibernate检索生成的SQL的方法。

我浏览了Persister类,驱动程序,不同的拦截器和事件。 有很多地方可以看,甚至缩小搜索范围也将有很大帮助。

trans by 2020-01-14T15:44:26Z

如何使用NHibern保留枚举

有没有办法使用NHibernate将枚举持久化到数据库? 那有一张代码表和枚举中每个值的名称。

我想保留没有实体的枚举,但仍然具有从所有其他引用实体到枚举的表的外键(枚举的int表示形式)。

trans by 2020-01-11T06:25:53Z

.net-如何使用NHibernate模式生成来更新数据库表模式?

我试图弄清楚如何将NHibernate配置与映射一起使用以更新表架构,而不是删除并重新创建它们。

目前,我正在将NHibernate.Tool.hbm2ddl.SchemaExport obj与FluentNHibernate结合使用,以生成mysql数据库的数据库架构。 虽然我不能说这是一个很大的问题,但是每当我在数据库上调用SchemaExport.Execute时,它将删除所有表,然后重新创建它们。

如果我可以让它更新现有的表结构并尽可能保留数据,那将会更酷。 但是我真的不想使用商业产品或代码生成器,因为我总体上不喜欢代码生成,并且我不需要足够的钱来考虑为此付费。 因此,希望任何答案都能牢记这些警告。

trans by 2019-12-29T21:30:58Z

何时在NHibernate / Hibernate OneToMany关系上使用inverse = false?

我一直试图了解Hibernate的inverse属性,但这似乎只是概念上困难的事情之一。

我得到的要点是,当您拥有一个使用一对多映射的Child对象集合的父实体(例如Parent)时,在映射上设置inverse = true会告诉Hibernate'另一面(子 )有责任自行更新以维护其表中的外键引用。

在将Children添加到代码中的集合中,然后保存Parent(设置了cascade-all)时,这样做似乎有两个好处:您可以在数据库上保存不必要的命中(因为没有设置反向,Hibernate认为这样) 有两个地方可以更新FK关系),并且根据官方文档:

如果某列    关联被声明   NOT NULL,NHibernate可能会导致   创建时违反约束   或更新关联。 阻止   这个问题,你必须使用   与的双向关联   许多有价值的末端(套装或袋子)   标记为inverse =“ true”。

到目前为止,这一切似乎都是有道理的。 我不明白的是:什么时候不想在一对多关系上使用inverse = true?

trans by 2019-09-27T06:50:37Z

.net-在同一解决方案中引用2个不同版本的log4net

我正在使用引用log4net 1.2.10.0的NHibernate 2.1.2.400。在同一项目中,我还使用了简单的记帐SDK,但遗憾的是它仍在使用log4net 1.2.9.0。

因此,如果我引用log4net 1.2.10.0,但我可以使NHibernate正常工作,但是simpleSDK无法正常工作。 反之亦然...

我猜大多数问题都来自log4net更改了其组装密钥这一事实。 我尝试使用绑定重定向没有成功:2个DLL没有相同的密钥。

我正在考虑重新编译NHibernate以使用log4net 1.2.9.0,但这似乎是错误的事情,我的感觉是,Simply Accounting不会很快更新其SDK以使用log4net 1.2.10.0。

处理此问题的最佳方法是什么? 有可能解决吗?

trans by 2019-09-22T16:19:59Z

如何在NHibernate中删除子对象?

我有一个父对象,它与子对象的IList有一对多的关系。 删除子对象的最佳方法是什么? 我没有删除父母。 我的父对象包含一个IList子对象。 以下是一对多关系的映射:

<bag name="Tiers" cascade="all">
  <key column="mismatch_id_no" />
  <one-to-many class="TGR_BL.PromoTier,TGR_BL"/>
</bag>

如果我尝试使用clear()从集合中删除所有对象,然后调用SaveOrUpdate(),我会得到以下异常:

System.Data.SqlClient.SqlException: Cannot insert the value NULL into column

如果我尝试单独删除子对象然后从父对象中删除它,我得到一个例外:

deleted object would be re-saved by cascade

这是我第一次处理在NHibernate中删除子对象。 我究竟做错了什么?

编辑:只是为了澄清 - 我不是试图删除父对象,只是删除子对象。 我将父母的关系设置为一对多。 我是否还需要在子对象映射上创建多对一关系?

trans by 2019-09-19T10:26:18Z

NHibern中的反向属性

我如何使用反向属性? 如果我没有弄错,对于一对多关系,inverse属性必须设置为true。 对于多对多关系,其中一个实体类逆属性必须设置为true,另一个设置为false。

任何人都可以对此有所了解吗?

trans by 2019-09-12T01:39:25Z

c# - 将IList或IEnumerable转换为Array的最佳方法

我有一个HQL查询,可以生成IList的结果,或IEnumerable结果。

但是,我希望它返回我正在选择的实体数组,实现它的最佳方法是什么? 我可以通过它枚举并构建数组,或者使用CopyTo()定义的数组。

有没有更好的方法? 我选择了CopyTo方法。

trans by 2019-09-10T02:14:46Z

如何使用流畅的NHibernate将枚举映射为int值?

问题说真的,默认是它映射为PersistenceModel,但我需要它映射为int

我正在使用PersistenceModel设置我的约定,如果这有任何区别。 提前致谢。

更新发现从主干上获取最新版本的代码解决了我的困境。

trans by 2019-09-03T08:16:35Z

c# - TransactionScope如何回滚交易?

我正在编写集成测试,我将把一些对象插入数据库,然后检查以确定我的方法是否检索这些对象。

我与数据库的连接是通过NHibernate ...而我创建这样一个测试的常用方法是执行以下操作:

NHibernateSession.BeginTransaction();

//use nhibernate to insert objects into database
//retrieve objects via my method
//verify actual objects returned are the same as those inserted

NHibernateSession.RollbackTransaction();

但是,我最近发现了TransactionScope,它显然可以用于这个目的......

我发现的一些示例代码如下:

public static int AddDepartmentWithEmployees(Department dept)
{

    int res = 0;

    DepartmentAdapter deptAdapter = new DepartmentAdapter();
    EmployeeAdapter empAdapter = new EmployeeAdapter();
    using (TransactionScope txScope = new TransactionScope())
    {

        res += deptAdapter.Insert(dept.DepartmentName);
        //Custom method made to return Department ID 
        //after inserting the department "Identity Column"
        dept.DepartmentID = deptAdapter.GetInsertReturnValue();
        foreach(Employee emp in dept.Employees)
        {

            emp.EmployeeDeptID = dept.DepartmentID;
            res += empAdapter.Insert(emp.EmployeeName, emp.EmployeeDeptID);

        }
        txScope.Complete();

    }
    return res;

}

我相信,如果我不包含TransactionScope行,那么插入的数据将被回滚。 但不幸的是,我不明白这是怎么可能的...... RollbackTransaction(对象如何跟踪数据库中的TransactionScopeempAdapter对象及其事务。

我觉得我在这里错过了一些信息......我真的能够通过使用TransactionScope包围我的代码来替换我的TransactionScopeRollbackTransaction()吗?

如果没有,那么TransactionScope如何回滚交易呢?

trans by 2019-08-23T06:31:30Z

.net - Criteria SpatialRestrictions.IsWithinDistance NHibernate.Spati

有没有人实现过这个,或者知道是否难以实现这个/有任何指针?

public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance)
{
    // TODO: Implement
    throw new NotImplementedException();
}

来自NHibernate.Spatial.Criterion.SpatialRestrictions

我可以使用&#34;其中NHSP.Distance(PROPERTY,:point)&#34; 在hql中。 但是想要将此查询与我现有的Criteria查询相结合。

目前我正在创建一个粗糙的多边形,并使用

criteria.Add(SpatialRestrictions.Intersects("PROPERTY", myPolygon));

编辑通过在SpatialRelationCriterion上重载构造函数来获得原型,添加新的SpatialRelation.Distance

public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance)
        {
            return new SpatialRelationCriterion(propertyName, SpatialRelation.Distance, anotherGeometry, distance);
        }

为SpatialRelationCriterion添加了一个新字段

private readonly double? distance;

public SpatialRelationCriterion(string propertyName, SpatialRelation relation, object anotherGeometry, double distance)
            : this(propertyName, relation, anotherGeometry)
        {
            this.distance = distance;
        }

编辑ToSqlString

object secondGeometry = Parameter.Placeholder;
                if (!(this.anotherGeometry is IGeometry))
                {
                    secondGeometry = columns2[i];
                }

                if (distance.HasValue)
                {
                    builder.Add(spatialDialect.GetSpatialRelationString(columns1[i], this.relation, secondGeometry, distance.Value, true));
                }
                else
                {
                    builder.Add(spatialDialect.GetSpatialRelationString(columns1[i], this.relation, secondGeometry, true));
                }

重载了ISpatialDialect.GetSpatialRelationString

在MsSql2008SpatialDialect中实现了重载

public SqlString GetSpatialRelationString(object geometry, SpatialRelation relation, object anotherGeometry, double distance, bool criterion)
        {
            var x = new SqlStringBuilder(8)
                           .AddObject(geometry)
                           .Add(".ST")
                           .Add(relation.ToString())
                           .Add("(")
                           .AddObject(anotherGeometry)
                           .Add(")");

            if (criterion)
            {
                x.Add(" < ");
                x.AddObject(distance.ToString());
            }

            return x.ToSqlString();
        }

不确定为什么没有使用AddParameter?

trans by 2019-08-09T15:50:00Z

c# - 有充分理由不使用ORM吗?

在我的学徒期间,我已经将NHibernate用于一些较小的项目,我自己编写和设计。 现在,在开始一个更大的项目之前,讨论产生了如何设计数据访问以及是否使用ORM层。 由于我仍处于学徒阶段,并且仍然认为自己是企业编程的初学者,我并没有真正尝试推动我的观点,即使用对象关系映射器到数据库可以大大简化开发。 开发团队中的其他程序员比我经验丰富,所以我想我会按照他们的说法去做。:-)

但是,我不完全理解不使用NHibernate或类似项目的两个主要原因:

  1. 可以使用SQL查询构建自己的数据访问对象,并将这些查询复制出Microsoft SQL Server Management Studio。
  2. 调试ORM可能很难。

所以,当然我可以用很多SELECTs等构建我的数据访问层,但是在这里我会错过自动连接,延迟加载代理类的优势以及如果表获取新列或列获得更低的维护工作量重命名。 (更新了大量的SELECT,INSERTUPDATE查询与更新映射配置以及可能重构业务类和DTO。)

此外,如果您不熟悉框架,使用NHibernate可能会遇到无法预料的问题。 例如,这可能是信任Table.hbm.xml,您可以在其中设置字符串的长度以自动验证。 但是,我也可以想象一下基于“简单”SqlConnection查询的数据访问层中的类似错误。

最后,上面提到的那些论点真的是不利用ORM用于基于数据库的非平凡企业应用程序的理由吗? 他/我可能错过了其他可能的争论吗?

(我应该补充一点,我认为这就像第一个基于.NET / C#的“大型”应用程序需要团队合作。在Stack Overflow上被认为非常正常的良好实践,例如单元测试或持续集成,都是非 - 到现在为止。)

trans by 2019-08-01T04:21:47Z

NHibern中的List vs Set vs Bag

NHibernate映射文件中列表,集合和包之间的区别是什么? 每个如何与.NET集合相关?

trans by 2019-07-29T19:31:09Z

c# - Moq:非可覆盖成员的设置无效:x => x.GetByTitle(“asdf”)

不知道如何解决这个问题,尝试对方法“GetByTitle”进行单元测试

以下是我的定义:

public class ArticleDAO :  GenericNHibernateDAO(IArticle, int>, IArticleDAO
{
    public IArticle GetByTitle(string title)
    {
        IQuery query = Session.CreateQuery("...")
        return query.UniqueResult<IArticle>();
    }
}

public interface IArticleDAO
{
    IArticle GetByTitle(string title);
}

单元测试:

[Test]
public void can_load_by_title()
{
    _mockDaoFactory.Setup(x => x.GetArticleDao())
                                .Returns(_mockArticleDao.Object);
    _mockArticleDao.Setup(x => x.GetByTitle("some title"))
                                .Returns(article1.Object);

    _articleManager.LoadArticle("some title");

    Assert.IsNotNull(_articleManager.Article);
}

运行测试给出了错误:

System.ArgumentException: Invalid setup on a non-overridable member:
x => x.GetByTitle("some title")

更新

我的[Setup]看起来像:

[Setup]
public void SetUp()
{
     _mockDaoFactory = new Mock<IDaoFactory>();
     _mockArticleDao = new Mock<ArticleDao>();

     _articleManager = new ArticleManager(_mockDaoFactory.Object);    
}
trans by 2019-07-26T04:54:45Z

.net - 如何使用NHibernate进行分页?

例如,我想在ASP.NET网页中填充gridview控件,只显示显示的行数所需的数据。 NHibernate如何支持这个?

trans by 2019-07-13T06:30:07Z

.net - 实体框架4与NHibern

很多人已经在网上讨论过Entity Framework的第一个版本(也在stackoverflow上),很明显,当我们已经拥有像NHibernate这样的更好的选择时,它不是一个好的选择。 但我无法找到实体框架4和NHibernate的良好比较。 我们可以说今天NHibernate是所有.NET ORM中的领导者,但是我们可以期待Entity Framework 4从这个位置取代NHibernate。 我认为如果微软真的在EF4中注入了非常好的功能,它可以给NHibernate带来很好的竞争,因为它具有Visual Studio集成,更易于使用,并且在大多数商店中总是优先考虑MS产品。

trans by 2019-06-30T19:40:02Z

何时在NHibernate / Hibernate OneToMany关系上使用inverse = false?

我一直试图掌握Hibernate的逆属性,它似乎只是概念上难以解决的问题之一。

我得到的要点是,当你有一个使用一对多映射的Child对象集合的父实体(例如Parent)时,在映射上设置inverse = true告诉Hibernate'另一边(Child) )有责任更新自己以维护其表中的外键引用'。

这样做对于在代码中向集合中添加Children,然后保存Parent(使用cascade-all set)有两个好处:在数据库上保存一个不必要的命中(因为没有逆集,Hibernate认为它 有两个地方更新FK关系),并根据官方文档:

如果是一列    关联被宣布   NOT NULL,NHibernate可能会导致   创建时的约束违规   或更新关联。 阻止   这个问题,你必须使用一个   双向关联   许多有价值的结束(套装或包)   标记为inverse =“true”。

到目前为止,这一切似乎都有意义。 我没有得到的是:你什么时候不想在一对多关系中使用inverse = true?

trans by 2019-06-16T03:06:44Z

在NHibernate Linq提供fetch vs FetchMany

NHibernate渴望加载可以使用FetchFetchMany完成,如在Mike Hadlow博客上的NHibernate Linq Eager Fetching中所述。

这两种方法有什么区别,在什么情况下都会使用?

trans by 2019-06-13T14:23:05Z

1 2 下一页 共2页