Fluent nhibernate Fluent Nhibernate修改默认id

Fluent nhibernate Fluent Nhibernate修改默认id,fluent-nhibernate,mapping,Fluent Nhibernate,Mapping,今天我已经建立了流畅的nhibernate。 我遇到了Ids,当我将一个类映射到另一个类时, 我必须指定类映射到的id。 因为我的id总是类名+id nhibernate的默认类名为+“”+id 因此,当我必须按如下方式创建映射时: Id(x=>x.MenuItemId,“MenuItemId”) 如何将设置覆盖为我需要的设置,因此我只能使用映射作为 Id(x=>x.MenuItemId) 只有当我参加其他课程时,问题才会出现 MenuItem和我使用的实体菜单连接 HasMany(x=>x.M

今天我已经建立了流畅的nhibernate。 我遇到了Ids,当我将一个类映射到另一个类时, 我必须指定类映射到的id。 因为我的id总是类名+id

nhibernate的默认类名为+“”+id

因此,当我必须按如下方式创建映射时:

Id(x=>x.MenuItemId,“MenuItemId”)

如何将设置覆盖为我需要的设置,因此我只能使用映射作为

Id(x=>x.MenuItemId)

只有当我参加其他课程时,问题才会出现

MenuItem和我使用的实体菜单连接

HasMany(x=>x.MenuItems).Class(typeOf(Menu))

我们发现: 这就是解决办法

身份

automapper固执己见,它期望您的类以特定的方式设计;如果它们不是,那么它将无法在没有一点帮助的情况下自动映射它们。自动映射程序希望您的身份名为Id,如果不是,它将找不到

通过覆盖自动映射配置中的IsId方法,可以修改自动映射发现标识的方式。将为实体中已被ShouldMap(成员)条件接受的所有成员调用此方法;无论您为哪个成员返回true,都将映射为标识

public override bool IsId(Member member)
{
  return member.Name == member.DeclaringType.Name + "Id";
}
该示例将匹配以其实体命名的任何ID,例如CustomerId

并称之为:

return Fluently.Configure()
               .MsSql2008
               .ConnectionString(c => c.FromConnectionStringWithKey("database"))
           .ShowSql()
               .ProxyFactoryFactory("NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu"))
                .Mappings(x => x.FluentMappings
.AddFromAssembly(
Assembly.GetExecutingAssembly())
.Conventions.AddFromAssemblyOf<Location.IdConvention>())
.BuildSessionFactory();
public class IdConvention : IIdConvention
    {
        public void Apply(IIdentityInstance identityInstance)
        {
            identityInstance.Column(identityInstance.EntityType.Name + "Id");
        }
    }