0

我正在尝试做一个非常简单的映射。我正在关注 NHibernate 3.0 Cookbook,我遇到了 FluentNHibernate.dll 中缺少 NaturalId() 方法的问题。这本书让我建立了这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentNHibernate.Mapping;
using Eg.Core;

namespace Eg.FluentMappings.Mappings
{
    public class ProductMapping : ClassMap<Product>
    {
        public ProductMapping()
        {
            Id(p => p.Id)
                .GeneratedBy.GuidComb();
            DiscriminateSubClassesOnColumn("ProductType");
            Version(p => p.Version);
            NaturalId()
                .Not.ReadOnly()
                .Property(parentIsRequired => parentIsRequired.Name);
            Map(p => p.Description);
            Map(p => p.UnitPrice)
                .Not.Nullable();
        }
    }
}

当我尝试编译它时,我收到一个错误:名称“NaturalId”在当前上下文中不存在。我是否缺少另一个 dll 或其他什么?

我环顾四周,发现了很多。这是一个似乎已经回答的问题,但我无法使用map.NaturalId()or让它工作Map.NaturalId()SharpArchitecture / Fluent NHibernate

4

1 回答 1

1

找到了答案。不知道为什么,但您必须在 NaturalId() 上使用 base 关键字。以下是我修改后的课程:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentNHibernate.Mapping;
using Eg.Core;

namespace Eg.FluentMappings.Mappings
{
    public class ProductMapping : ClassMap<Product>
    {
        public ProductMapping()
        {
            Id(p => p.Id)
                .GeneratedBy.GuidComb();
            DiscriminateSubClassesOnColumn("ProductType");
            Version(p => p.Version);
            base.NaturalId()
                .Not.ReadOnly()
                .Property(parentIsRequired => parentIsRequired.Name);
            Map(p => p.Description);
            Map(p => p.UnitPrice)
                .Not.Nullable();
        }
    }
}
于 2012-06-13T18:48:17.323 回答