gpt4 book ai didi

nhibernate - Fluent NHibernate Automapping 与抽象基类

转载 作者:行者123 更新时间:2023-12-04 12:37:00 26 4
gpt4 key购买 nike

鉴于以下类(class):

public class Address : Place
{
public virtual string Street { get; set; }
public virtual int Number { get; set; }


public override string WhereAmI
{
get { string.Format("{0} {1}", Street , Number); }
}
}
public abstract class Place : DomainEntity
{
public abstract string WhereAmI { get; }
}

当我使用这个映射时:
var autoMap = AutoMap.AssemblyOf<Party>()
.Override<Place>(map => map.IgnoreProperty(p => p.WhereAmI))
.Override<Address>(map => map.IgnoreProperty(p => p.WhereAmI))
.Where(type => type.Namespace != null && type.Namespace.Contains("Models"));

我仍然收到错误: 在“地址”类中找不到属性“WhereAmI”的 setter

我做的事情:
  • 当我从基类“地址”中删除该属性时,它可以工作。
  • 当我使用 .OverrideAll(map => map.IgnoreProperty("WhereAmI")) 但我不希望它是全局的,因为在另一个类中我可能会使用相同的属性名称,而我确实想要包含此属性

  • 除了使用接口(interface)之外,还有什么方法可以让它工作吗?

    最佳答案

    我尝试在 FluentNHibernate 代码中准确追踪为什么当被忽略的属性来自基类时 IgnoreProperty 似乎崩溃了,但时间用完了。如果 get-only 属性不是来自基类,它似乎工作正常。

    无论如何,您的情况的解决方案似乎是通过从 DefaultAutomappingConfiguration 继承来创建自定义 IAutomappingConfiguration。请参阅此堆栈溢出答案:How can I create a Fluent NHibernate Convention that ignores properties that don't have setters .

    这是我成功用于自动映射您提供的示例实体的自定义自动映射配置:

    protected class CustomConfiguration : DefaultAutomappingConfiguration
    {
    public override bool ShouldMap (Member member)
    {
    if (member.IsProperty && member.IsPublic && !member.CanWrite)
    {
    return false;
    }

    return base.ShouldMap(member);
    }

    public override bool ShouldMap(Type type)
    {
    return type.Namespace != null && type.Namespace.Contains("Models");
    }
    }

    然后它的用途:
    var autoMap = AutoMap
    .AssemblyOf<DomainEntity>(new CustomConfiguration());

    请注意,示例中的 Where 子句必须移动到自定义配置类中,因为如果您使用自定义配置实例,则不允许将其链接。

    关于nhibernate - Fluent NHibernate Automapping 与抽象基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5936088/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com