如果我的ClassMap包含一个引用(m => m.Store).Column("StoreId"),我调用SchemaExport,那么我的数据库表包含两个外键列,一个名为'StoreId‘,一个名为'Store_id’。
如果我离开Column()方法,那么它只会创建'Store_id‘列。
这是FluentNHibernate框架中的一个bug吗?我只想要“StoreId”专栏。
提前谢谢。
public class EntityMap<T> : ClassMap<T> where T : Entity
{
public EntityMap()
{
Id( m => m.Id );
}
}
public class StoreMap : EntityMap<Store>
{
public StoreMap()
{
Map( m => m.Name );
HasMany( m => m.Staff )
.Inverse()
.Cascade.All();
HasManyToMany( m => m.Catalogue )
.Table( "Store_Product" )
.Cascade.All();
}
}
public class EmployeeMap : EntityMap<Employee>
{
public EmployeeMap()
{
Map( m => m.LastName );
Map( m => m.FirstName );
References( m => m.Store ).Column( "StoreId" );
}
}
public class ProductMap : EntityMap<Product>
{
public ProductMap()
{
Map( m => m.Name );
HasManyToMany( m => m.Stores )
.Table( "Store_Product" )
.Inverse()
.Cascade.All();
}
}发布于 2011-12-30 13:32:52
现在找到了解决办法,尽管我找的地方都没有描述。
必须设置列是双向的。然后"Store_id“列消失。谢谢大家的回答!
就我上面的例子而言:
public class EntityMap<T> : ClassMap<T> where T : Entity
{
public EntityMap()
{
Id( m => m.Id );
}
}
public class StoreMap : EntityMap<Store>
{
public StoreMap()
{
Map( m => m.Name );
HasMany( m => m.Staff )
.KeyColumn( "StoreId" )
.Inverse()
.Cascade.All();
HasManyToMany( m => m.Catalogue )
.Table( "Store_Product" )
.ParentKeyColumn( "StoreId" )
.ChildKeyColumn( "ProductId" )
.Cascade.All();
}
}
public class EmployeeMap : EntityMap<Employee>
{
public EmployeeMap()
{
Map( m => m.LastName );
Map( m => m.FirstName );
References( m => m.Store ).Column( "StoreId" );
}
}
public class ProductMap : EntityMap<Product>
{
public ProductMap()
{
Map( m => m.Name );
HasManyToMany( m => m.Stores )
.Table( "Store_Product" )
.ParentKeyColumn( "ProductId" )
.ChildKeyColumn( "StoreId" )
.Inverse()
.Cascade.All();
}
}发布于 2011-12-28 06:24:29
这不是一个bug,如果在默认情况下离开列() nhibernate,假设您的外键是属性Name+underscore+id,则您是leave列-- nhhibernate采用您被映射为Store的属性名称并合并到_id
您必须将.KeyColumn("StoreId")添加到StoreMap for HasMany中,地图如下所示
public StoreMap()
{
Map( m => m.Name );
HasMany( m => m.Staff )
.Inverse()
.Cascade.All().KeyColumn("StoreId");
HasManyToMany( m => m.Catalogue )
.Table( "Store_Product" )
.Cascade.All();
}https://stackoverflow.com/questions/8649750
复制相似问题