构建FluentNH配置的奇怪错误

时间:2013-01-10 22:37:59

标签: nhibernate fluent-nhibernate

我正在研究一个Fluent NHibernate项目,并且做了一些测试我遇到了一个非常奇怪的错误:

The entity '<>c__DisplayClass3' doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id).

报告的相关实体是:

{Name = "<>c__DisplayClass3" FullName = "TPLLCPortal.Domain.Account+<>c__DisplayClass3"}

我没有任何名为DisplayClass的类,但我确实有Account个实体。我正在使用如下所示的主键约定:

public class PrimaryKeyConvention : IIdConvention
{
    public void Apply(IIdentityInstance instance)
    {
        instance.GeneratedBy.GuidComb();
    }
}

我的Account类继承自EntityBase类,该类声明ID为:

/// <summary>
/// Gets or sets the id.
/// </summary>
/// <value>The id.</value>
public virtual Guid Id { get; protected internal set; }

我确信我正在正确设置配置并且正在拾取约定,但以防万一我添加了覆盖并专门映射了Account类的ID。没有骰子。

有什么想法在这里发生了什么?

我正在使用FNH 1.3.0.733和NHibernate 3.3.1.4000(都是从NuGet加载)。

1 个答案:

答案 0 :(得分:4)

看起来我想通了。 This SO answer有钥匙。因为类上的某些方法使用lambdas,所以编译器通过将DefaultAutomappingConfiguration指定为!type.IsDefined(typeof(CompilerGeneratedAttribute), false)覆盖的一部分来创建可以在ShouldMap中排除的类。