C# 只读属性的Fluent NHibernate映射

C# 只读属性的Fluent NHibernate映射,c#,nhibernate,fluent-nhibernate,fluent,C#,Nhibernate,Fluent Nhibernate,Fluent,我最近从1.0迁移到Fluent NHibernate 1.1,迁移过程中有一些突破性的变化 例如,域模型中的字段 public virtual string CustomerType { get { return /*computed value based on _Type which is a column in database */; } } public virtual string MemberType {

我最近从1.0迁移到Fluent NHibernate 1.1,迁移过程中有一些突破性的变化

例如,域模型中的字段

    public virtual string CustomerType
    {
        get { return /*computed value based on _Type which is a column in database */; }

    }

    public virtual string MemberType
    {
        get { return _Type; }
        set { _Type = value; }

    }
用于在不指定任何配置/约定的情况下正常工作。现在它抛出一个错误,声明“找不到setter”。我看到的解决方案是,创建一个成员变量,如customerType或_customerType,或者为此放入一个受保护的setter

请注意,CustomerType依赖于从数据库检索到的另一个值

我也看到了其他选择,比如在哪里 将覆盖DefaultAutoMappingConfiguration,例如

   public override bool ShouldMap(Member member)
    {
        if (member.IsProperty && !member.CanWrite)
        {
            return false;
        }

        return base.ShouldMap(member);
    }
但这意味着在映射中会完全跳过具有私有或受保护setter的其他字段

我正在寻找一种解决方案,Fluent NHibernate在未指定setter时不查找setter,而是映射私有/受保护的setter


有关于如何进行此操作的说明吗?

CustomerValue是否作为派生值从数据库中出来


如果它没有删除虚拟对象并将其排除在映射中。

如果这是唯一的映射或少数中断的映射之一,则手动忽略它/使用无setter映射对其进行映射。否则,按照您列出的建议关闭映射不可写属性,并映射任何异常。我不确定你还能做什么,除了自己分岔代码和解决问题

更新
我刚刚运行了一个测试,
PropertyInfo.CanWrite
为受保护和私有setter返回true。因此,我不确定您发布的解决方案是否存在问题。

是的。它是从数据库中的列派生的值。我也更新了这个问题。