我正在尝试迁移到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).
答案 0 :(得分:1)
您是否使用Fluent Nhibernate注册了该约定?
你应该有一些事情
AutoMap.AssemblyOf<CompanyAccounting>()
.Conventions.AddFromAssemblyOf<CustomPrimaryKeyConvention>()