自动映射没有Id映射

Gin*_*ini 3 fluent-nhibernate automapping

My Entity Class:
public class Building 
    {
        /// <summary>
        /// internal Id 
        /// </summary>
        public virtual long Id { get; set; }
..............
}
Run Code Online (Sandbox Code Playgroud)

我的映射:

var model = AutoMap.AssemblyOf<Building>()
                        .Setup(s => s.FindIdentity = p => p.Name == "Id")
                        .Where(t => t.Namespace == "SpikeAutoMappings");

var database = Fluently.Configure()
                        .Database(DatabaseConfigurer)
                        .Mappings(m=>m.AutoMappings.Add(model));
Run Code Online (Sandbox Code Playgroud)

我需要有人帮我看看有什么问题因为我在运行单元测试时一直有这个错误:

Initialization method TestProject1.MappingTestBase.TestInitialize threw exception. FluentNHibernate.Cfg.FluentConfigurationException:  FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.

 --->  FluentNHibernate.Visitors.ValidationException: The entity doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id)..
Run Code Online (Sandbox Code Playgroud)

J. *_* Ed 9

以上两个答案都是对的; 除非您指定不同,否则automapper假定您有一个int Id字段.
如果您的Id很长,则自动播放器可能无法正确识别它.
尝试为您的类定义MappingOverride,如下所示:

public class UserMappingOverride : IAutoMappingOverride<User>
{
    #region IAutoMappingOverride<User> Members

    public void Override(AutoMapping<User> mapping)
    {
        mapping.Id(u => u.Name);
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

Id()函数允许您覆盖自动化的ID字段应该是什么的约定.
有关覆盖的更多信息,请参阅http://wiki.fluentnhibernate.org/Auto_mapping#Overrides.
干杯,
Jhonny