Fluent nhibernate Fluent NHibernate:实体';(方法名称)和#x27;不';我没有映射Id。

Fluent nhibernate Fluent NHibernate:实体';(方法名称)和#x27;不';我没有映射Id。,fluent-nhibernate,automapping,Fluent Nhibernate,Automapping,这是我第一次尝试Fluent NHibernate和自动映射。不幸的是,我遇到了一个我无法克服的问题。我得到一个错误,说我的一个类上的方法无法映射 public class Person { public IEnumerable<string> GetStuff(){return stuff;} } 公共类人物 { public IEnumerable GetStuff(){return stuff;} } 例外消息是: The entity '<GetStuff&

这是我第一次尝试Fluent NHibernate和自动映射。不幸的是,我遇到了一个我无法克服的问题。我得到一个错误,说我的一个类上的方法无法映射

public class Person 
{
   public IEnumerable<string> GetStuff(){return stuff;}
}
公共类人物
{
public IEnumerable GetStuff(){return stuff;}
}
例外消息是:

The entity '<GetStuff>d__0' doesn't have an Id mapped.
实体“d\u 0”没有映射的Id。
我甚至尝试添加一个IAutoMappingOverride来忽略该方法(使用map.IgnoreProperty)


它真的试图映射一种方法吗?这是怎么回事?

我通过手动用接口标记每个实体来解决这个问题

public class MyAutomappingConfiguration : DefaultAutomappingConfiguration
{
    public override bool ShouldMap(Type type)
    {
        return type.GetInterfaces().Contains(typeof (IEntity));
    }
}

要自动映射的每个实体都必须具有Id属性,或者从具有Id属性的类继承。您的Person类两者都没有


另外,根据我的经验,实体中的所有公共方法都必须声明为虚拟的(尽管如果您急于加载所有内容,这可能不是必需的)。

Person实体不是问题所在,请阅读异常消息。我没有包括完整的人的定义,因为我想保持简单。我还尝试向GetStuff方法中添加virtual,但没有任何帮助。我看到了消息,对我来说没有任何意义。不知道为什么FNH会将一个方法视为一个实体,也不知道d__0是什么。它确实抱怨缺少ID,这与您的示例代码一致,因此认为值得一试。很高兴听到你解决了这个问题——这对我来说是一种新的方法。