C#Nhibernate映射对象

时间:2014-04-11 12:46:20

标签: c# nhibernate

我问了一个类似的问题,但我仍然怀疑该怎么做,所以我想用更多的信息来提问这个问题:

比如说我有以下Object

    public class Callback : SuperObject
{
    public virtual DateTime PERIOD { get; set; }
    public virtual int COMPLETED { get; set; }
    public virtual int COMPLETED_WITHIN_2HOURS { get; set; }
}

现在if if我添加一个包含映射信息的XML文件:

    <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Henvendelser" namespace="Henvendelser.Objects.Callback">
  <class name="Henvendelser.Objects.Callback">
    <id name="PERIOD" column="PERIOD">
      <generator class="identity" />
    </id>
    <property name="COMPLETED" />
    <property name="COMPLETED_WITHIN_2HOURS" />
  </class>
</hibernate-mapping>

然后以下内容将完全正常运行:

        var query = new StringBuilder();
    query.Append("SELECT   LAST_UPD AS PERIOD, ");
    query.Append("COUNT(CASE WHEN STATUS ='Færdig' THEN 1 END) as completed, ");
    query.Append("COUNT(CASE WHEN SOLVED_SECONDS /60 /60 <= 2 THEN 1 END) as completed_within_2hours ");
    query.Append("FROM     KS_DRIFT.NYK_SIEBEL_CALLBACK_AGENT_H_V ");
    query.Append("WHERE    LAST_UPD BETWEEN '" + start.ToString("yyyy-MM-dd") + "' AND '" + end.ToString("yyyy-MM-dd") + "' ");
    query.Append("AND      STATUS ='Færdig' ");
    query.Append("GROUP BY LAST_UPD ORDER BY LAST_UPD ASC");
    var session = sessionFactory.OpenSession();
    var result = session.CreateSQLQuery(query.ToString()).AddEntity(typeof(Callback)).List<Callback>();

但是在一个更大的程序中哪个很棒我可能有10个或更多不同的objects,这意味着在这种情况下我将需要制作10个映射对象的xml文件。现在在我的逻辑中mapping xml基本上说object类已经看起来如此,所以看起来有点多余!

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

为避免必须为每个类定义映射,您可以Fluent NHibernate使用automapping

  

Fluent NHibernate有一个名为Auto Mapping的概念,它是一种根据一组约定自动映射所有实体的机制。

     

自动映射利用约定优于配置的原则。使用此原则,自动映射器检查您的实体并对特定属性应该是什么进行假设。也许您有一个名称为Id且类型为int的属性,自动映射将决定这是一个自动递增的主键。

     

通过使用自动映射,您可以使用非常少的代码映射整个域,当然也不需要XML。仍然存在可能不适合使用自动映射的情况,此时使用Fluent映射更合适;然而,对于大多数绿地应用(以及相当多的棕地应用),自动映射将更有能力。

正如其他用户指出的那样,使用ORM并创建普通的sql查询来加载数据是没有意义的。您可能需要在极端情况下执行此操作,但它不是规则,否则根本不使用NHibernate。

我建议您开始查看如何使用NHibernate的基本知识。

答案 1 :(得分:0)

此外,还有ConfORM自动映射器。 它是magical。 :)