如何告诉 Fluent NHibernate 不要映射类属性

Posted

技术标签:

【中文标题】如何告诉 Fluent NHibernate 不要映射类属性【英文标题】:How to tell Fluent NHibernate not to map a class property 【发布时间】:2010-10-28 19:10:45 【问题描述】:

我有一个在 fluent nhibernate 中映射的类,但我希望映射忽略其中一个类属性。

下面的类和映射出现此错误:

以下类型不能用作代理: iMasterengine.Data.Model.Calendar:方法 get_HasEvents 应该是虚拟的

//my class
public class Calendar : IEntity 
    public virtual int Id  get; private set; 
    public virtual string Name  get; set; 
    public virtual string SiteId  get; set; 
    public virtual IList<CalendarEvent> Events  get; set; 
    //ignore this property
    public bool HasEvents  get  return Events.Count > 0;  


//my mapping
public class CalendarMap : ClassMap<Calendar> 
    public CalendarMap() 
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.SiteId);
        HasMany(x => x.Events).Inverse();
        //what do I put here to tell nhibernate
        //to ignore my HasEvents property?
    

【问题讨论】:

【参考方案1】:

你可以在课堂上把HasEvents虚拟

public virtual bool HasEvents  get  return Events.Count > 0;  

您无需向映射添加任何内容。

如果您使用自动映射,您只需要告诉 fluent 导入属性,我认为您不是。

【讨论】:

在旧版本的 NHibernat.e 上通过 Linq 对我不起作用【参考方案2】:
map.IgnoreProperty(p => p.What);

【讨论】:

该行应该放在哪里?我想它会进入 CalendarMap 构造函数,但我没有看到那里有可用的地图实例。 它应该添加到您创建配置的位置。看到这个链接http://wiki.fluentnhibernate.org/Auto_mapping#Ignoring_properties IgnoreProperty() 仅适用于 automapping 如果您自己指定映射(即使用类映射),那么这无关紧要。海报中包含了一个类图,并没有说任何关于自动映射的内容,所以我看不出这有什么相关性。 我是从 google 发现的,我正在自动映射,所以即使它可能无法回答问题,它也回答了我的问题 我能否改变每个用户的基本方式,我想让它对一组用户可用并为一组用户隐藏。

以上是关于如何告诉 Fluent NHibernate 不要映射类属性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Fluent-NHibernate 和 MySQL 指定自动递增 (int) 标识列

如何在 Fluent NHibernate ClassMap 类中指定表名?

如何使用 Fluent nhibernate 正确更新行?

Fluent NHibernate:如何将整个类映射为只读?

如何结合 NHibernate Fluent 和 WPF-NHibernate 工具包中的 VmWrapper-Classes?

Fluent nHibernate - 如何在联结表上映射非键列?