3

我正在处理一个 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 加载)。

4

1 回答 1

4

看来我想通了。这个 SO 答案有关键。因为类上的某些方法使用 lambda,所以编译器会创建可以在 中排除的类,方法DefaultAutomappingConfiguration是指定!type.IsDefined(typeof(CompilerGeneratedAttribute), false)ShouldMap覆盖的一部分。

于 2013-01-11T01:31:36.830 回答