流畅的NHibernate AutoMapping PrimaryKey属性名称不是“Id”

时间:2011-05-19 12:14:38

标签: c# fluent-nhibernate primary-key automapping

我正在尝试迁移到Fluent NHibernate并遇到以下问题:(

我有一些以CompanyXXXXXX的方式调用的类,它们的PrimaryKey都是“CompanyId”,类型为Company。

我正在使用的HBM Mapping文件,直到名称为:

  <class name="CompanyAccounting" table="Company_Accounting" >
    <id column="CompanyID" type="Int32">
      <generator class="foreign">
        <param name="property">Company</param>
      </generator>
    </id>
    <one-to-one name="Company" constrained="true" />
  </class>

该实体如下:

public class CompanyAccounting
{
    public virtual Company Company {get;set;}        
}

是否可以使用某种AutoMapping功能,因为我有十几个这样的类,而且可能会有更多。

我尝试了以下内容:

    public class CustomPrimaryKeyConvention : IIdConvention
    {
        public void Apply(IIdentityInstance instance)
        {
            var type = instance.EntityType;
            if (type.Name.StartsWith("Company") && type.Name.Length > 7)
            {
                instance.CustomType(typeof(Company));
                instance.Column("CompanyId");
            } 
            else
            {
                instance.Column(instance.EntityType.Name + "Id");
            }
        }
    }

编辑:但我的If(...)[For“CompanyAccounting”Type]甚至没有被击中。有什么建议吗?

例外:

The entity 'CompanyAccounting' doesn't have an Id mapped. 
Use the Id method to map your identity property. For example: Id(x => x.Id).

1 个答案:

答案 0 :(得分:1)

您是否使用Fluent Nhibernate注册了该约定?

你应该有一些事情

AutoMap.AssemblyOf<CompanyAccounting>()
       .Conventions.AddFromAssemblyOf<CustomPrimaryKeyConvention>()