NHibernate中的持久性抽象计算属性

问题描述

如果在NH文档中,请提前道歉-我在那儿找不到。

在我看来,NH不允许抽象的计算持久属性,如:

public abstract class Client
{
    public int Id { get; set; }
    public string _Name { get; set; }
    public abstract string Name { get; }
}

public class Personal: Client
{
    public static Expression<Func<Personal,string>> NameExpression = client => $"SSN {client._Name}";

    public override string Name => NameExpression.Compile()(this);
}

public class Corporate: Client
{
    public static Expression<Func<Corporate,string>> NameExpression = client => $"Tax Id {client._Name}";

    public override string Name => NameExpression.Compile()(this);
}

(而且我意识到这是一个愚蠢的示例,我可以得到我想要的,而无需在SQL查询中计算出这些字符串。假设我有一个 real 例子,太乱了或专有权在此处列出。)

问题似乎是,当尝试在DefaultLinqToHqlGeneratorsRegistry.RegisterGenerator注册第二个密码时,它被认为已经在registeredProperties词典中,因为密钥是一个MemberInfo基本类属性,两者相同。

现在,我还不足以认为这是一个很大的限制,但是如果我能够绕开它,或者是新版本的NH来解除它,对我来说仍然很方便。

欢迎提出任何建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)