标签: nhibernate

Criteria.DISTINCT_ROOT_ENTITY与Projections.distinct

我对Hibernate很新.我发现我们可以使用以下两种不同的方式获得不同的结果.谁能告诉我他们之间有什么区别?何时使用其他?

Projections.distinct(Projections.property("id"));
Run Code Online (Sandbox Code Playgroud)

VS

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Run Code Online (Sandbox Code Playgroud)

nhibernate hibernate distinct hibernate-criteria

40
推荐指数
1
解决办法
5万
查看次数

如何使用NHibernate将SQL调用记录到Visual Studio的控制台?

我有NHibernate的以下配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.connection_string">Server=.\SQLEXPRESS;Database=mydb;Integrated Security=True;</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.release_mode">auto</property>
    <property name="adonet.batch_size">500</property>

    <property name="show_sql">true</property>

  </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

但SQL不会显示在Visual Studio的输出窗口中.是否必须安装log4net?或者应该show_sql独自工作?

nhibernate logging log4net visual-studio

39
推荐指数
4
解决办法
4万
查看次数

什么是投影?

什么是Projection,在数据库理论和NHibernate方面使用SetProjection()?

database nhibernate relational-algebra

39
推荐指数
3
解决办法
4万
查看次数

NHibernate文档的最佳位置?

我一直在为nhibernate寻找好的文档,特别是2.0版本.我最近回到了.NET开发阶段,在我的生活中,我找不到合适的文档(甚至是最新的文档).任何建议将不胜感激.

.net nhibernate

37
推荐指数
3
解决办法
8763
查看次数

在nhibernate中,HasOne和References有什么区别?

nhibernate HasOne()References()nhibernate 之间有什么区别?

.net c# nhibernate fluent-nhibernate

37
推荐指数
1
解决办法
9984
查看次数

究竟什么是"持久性无知"?

持久性无知通常被定义为持久化和检索标准.NET对象的能力(如果您真的坚持给它们命名,则为POCO).一个看似公认的标准.NET对象定义是:

"...普通的课程,你专注于手头的业务问题而不添加与基础设施相关的原因......"

但是,我看到人们将NHibernate描述为一个允许持久性无知的框架,但它是一个不能在任何标准.NET对象上工作的框架,只有符合特定设计要求的标准.NET对象,例如(源代码):

  • 所有类都必须具有默认构造函数
  • 除非打开类并且所有成员都是虚拟的,否则某些功能不起作用
  • 除非您滥用Equals/GetHashCode,否则对象标识无法正常运行

(旁白:在任何人不高兴之前,我并不打算在这里选择NHibernate,它只是一个经常被引用的框架示例,据说允许持久性无知.我敢肯定类似的论点可以应用于其他声称相同的ORM .)

现在虽然这个类本身没有任何持久性特定于框架的属性或基类等,但对我而言,它实际上并不是"持久性无知",因为它必须遵循一套设计指南以便所选持久性框架的使用.您必须考虑到持久性框架的要求来设计和实现该类; 如果你不了解它,那么这个班可能无法使用它.

当我在与"持久性无知" /"POCO"的定义问题是,我不知道怎么样,从概念上讲,这是真的有什么不同,以添加属性,如[Serializable][DataContract][XmlType]或任何其他持久性框架,具体的注解这有利于使用该框架的实体的持久性和检索.

那么,"持久性无知"到底是什么?

很明显,将它定义为能够持久化"普通类"是一种谬误,因为NHibernate只是在没有引用特定于框架的类的情况下是普通的,而它们非常特殊,因为它们需要不寻常的设计选择,例如默认构造函数和所有类-virtual成员和可变类型的Equals/GetHashCode实现.

因此,当对象促进使用持久性框架(在设计和结构中或通过使用特定于框架的注释)但不执行任何持久性逻辑时,"持久性无知"是否合理?

nhibernate orm data-access poco persistence-ignorance

37
推荐指数
2
解决办法
1万
查看次数

识别NHibernate代理类

我不是NHibernate用户; 我写了一个序列化实用程序库.用户已记录一个功能请求,我应该处理NHibernate代理类,将它们视为与实际类型相同.目前,我的代码将它们视为意外继承,并抛出异常.

代码不会提前知道NHibernate(包括没有引用,但我不是反射;-p)

是否有一种强大/可靠的方法来检测此类代理类型?显然DataContractSerializer处理这个很好,所以我希望它是非常简单的.也许是一些界面或[attribute]装饰.

此外,在反序列化期间; 目前我将创建原始类型(不是NHibernate类型).这是否适用于持久性目的?或者是否需要代理类型?如果是后者; 创建代理类型的实例需要什么?

.net c# nhibernate

37
推荐指数
3
解决办法
2万
查看次数

从Oracle的RAW(16)转换为.NET的GUID

我在手动调试.NET应用程序时遇到困难,其中Guid值从.NET到Oracle不同.

  • C#读取的位置:
    • 17D89D326C2142D69B989F5201288DBF
  • Oracle读到:
    • 329DD817216CD6429B989F5201288DBF

我怎么能够手动调试,即从C#的GUID能够将该值粘贴到oracle查询中并获得正确的结果(反之亦然)?

c# oracle nhibernate guid s#arp-architecture

37
推荐指数
3
解决办法
3万
查看次数

NHibernate还是流畅的NHibernate?

我有兴趣听取别人的意见,看看他们会选择哪一个(没有'neithers' please;),以及为什么.

使用流利的缺点是什么?(版本依赖可能?)优点,缺点,经验等

alt.net nhibernate orm fluent-nhibernate

36
推荐指数
3
解决办法
9755
查看次数

Fluent NHibernate - 仅在不存在时创建数据库模式

我有一个应用程序,我使用Fluent Nhibernate来创建我的数据库.到目前为止,我每次都在重新创建数据库模式.执行此操作的代码是:

public NhibernateSessionFactory(IPersistenceConfigurer config)
{
    _sessionFactory = Fluently.Configure().
        Database(config).
        Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>()).
        ExposeConfiguration(BuildSchema).
        BuildSessionFactory();
}

private static void BuildSchema(Configuration config)
{
    // if (DbExists(config))
    //    return; 

    new SchemaExport(config).Create(false, true);
}
Run Code Online (Sandbox Code Playgroud)

注意" if (DbExists(config))".这就是我想做的.我只想在它实际上不存在的情况下创建模式.在下一步 - 如果它不是最新的,我想更新它.

我该如何实现这一目标?我期待一个config.DatabaseExists(),但我看不到这样的事情.我看到了hacky解决方案的一些可能性,但是处理这个问题的典型推荐方法是什么?

.net database nhibernate fluent-nhibernate c#-4.0

36
推荐指数
2
解决办法
2万
查看次数