我正在研究一个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加载)。
答案 0 :(得分:4)
看起来我想通了。 This SO answer有钥匙。因为类上的某些方法使用lambdas,所以编译器通过将DefaultAutomappingConfiguration
指定为!type.IsDefined(typeof(CompilerGeneratedAttribute), false)
覆盖的一部分来创建可以在ShouldMap
中排除的类。