【问题标题】:Make a Nhibernate-based DAL obfuscation friendly使基于 Nhibernate 的 DAL 混淆变得友好
【发布时间】:2009-05-01 06:20:22
【问题描述】:

我希望混淆使用 NHibernate 编写的数据访问层。问题是,映射是在作为资源嵌入类库中的 XML 文件中完成的——这意味着映射是明文形式的。

有两种可能的解决方案: 1. Nhibernate 映射属性 (NHMA) 来装饰映射的实体(因此,当混淆代码运行时,NHibernate 会将其映射到混淆的类名) 2. Fluent NHibernate(同样,映射在代码中,所以混淆应该不是问题 - 我认为)。

现在,如果我们使用 HQL 进行查询,这两种解决方案都将不起作用 - 因为查询将引用原始类和字段/属性名称!

有解决办法吗?我们可以在 NHMA/Fluent 映射中为类/属性名称加上别名吗?

如果我们将 HQL 查询转换为使用 NHibernate Criteria API,Criteria API 会有所帮助吗?

(我确实知道混淆的优点和缺点/徒劳以及它有用的目的 - 所以这个问题根本不是要讨论这个问题。换句话说,请不要担心讨论“为什么”我想这样做!)

谢谢,

奎师那。

【问题讨论】:

    标签: c# nhibernate obfuscation orm


    【解决方案1】:

    我能想到的唯一解决方案是使用 Linq to NHibernate。目前它是NHibernate Contrib Project 的一部分,并不完全稳定。它将是 NHibernate 2.1 版本的一部分,该版本目前处于“Alpha”状态,应该很快相当稳定。

    对于映射,我会使用 Fluent NHibernate。而且由于 Linq 和 Fluent NHibernate 都使用 Lambda 表达式,因此它应该可以进行混淆处理。

    【讨论】:

      【解决方案2】:

      NHibernate Configuration 对象非常灵活。通过调用:

      var lConfig = new Configuration();
      lConfig.AddXmlString("whatever xml with config");
      

      您可以从任何来源添加字符串。这意味着您的 xmls 可以在程序集中加密并在配置 NH 时解密。

      但如果您只是在混淆,我认为 Fluent NH 是您的首选工具。

      【讨论】:

        猜你喜欢
        • 2010-09-30
        • 1970-01-01
        • 2013-07-31
        • 2017-07-03
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多