首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对发出的代码使用nNHibernate

对发出的代码使用nNHibernate
EN

Stack Overflow用户
提问于 2011-07-28 02:49:43
回答 1查看 1.1K关注 0票数 1

我正在开发一个软件,它将作为数据仓库的后端,其中事实定义将从xml文件中读取,相应的事实/维度表将在运行中创建。

我已经设法使它工作,即代码创建表,更新表结构,否则删除表并创建一个新表,它可以向表中插入数据,我们也可以从客户端应用程序查询数据仓库。到目前一切尚好。

现在我有两个问题

1) sql语句过多。问题:维护它将是一场噩梦

2) sql语句过多。问题:我被要求支持多个数据库,这意味着更多的sql语句。

但我想知道,使用Reflection.Emit为我的表生成类,然后使用ActiveRecord/nHibernate访问数据会有多难?这样我就不必做直接处理数据库的繁琐工作了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-28 19:40:53

代码语言:javascript
复制
class Fact
{
    public virtual int Id { get; set; }
    IDictionary Properties { get; set; }
}

模板

代码语言:javascript
复制
<hibernate-mapping>
  <class name="Fact">
    <dynamic-component name="Properties">
      <!--placeholder -->
    </dynamic-component>
  </class>
</hibernate-mapping>

用生成的替换<!--placeholder -->

代码语言:javascript
复制
<property
  name="P1"
  type="int" />
<property
  name="P2"
  type="string" />

构建

代码语言:javascript
复制
var doc = new System.Xml.XmlDocument();
doc.LoadXml(generatedXml);

new NHibernate.Cfg.Configuration()
    .AddDocument(doc)
...
    .BuildSessionFactory();

查询

代码语言:javascript
复制
var query = session.CreateCriteria<Fact>();

foreach (var restriction in restrictions)
{
    query.Add(Restrictions.Eq(restriction.Name, restriction.Value))
}

var facts = query.List<Fact>();

SendBack(facts);

创建/删除表

代码语言:javascript
复制
var dialect = Dialect.GetDialect(config.Properties);
var defaultCatalog = PropertiesHelper.GetString(NHibernate.Cfg.Environment.DefaultCatalog, config.Properties, null);
var defaultSchema = PropertiesHelper.GetString(NHibernate.Cfg.Environment.DefaultSchema, config.Properties, null);

var createTableSql = config.GetClassMapping(typeof(Fact)).Table.SqlCreateString(dialect, config.BuildMapping(), defaultCatalog, defaultSchema);
var dropTableSql = config.GetClassMapping(typeof(int)).Table.SqlDropString(dialect, defaultCatalog, defaultSchema);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6849602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档