列名为FluentNHibernate的错误?

列名为FluentNHibernate的错误?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,如果我的类映射包含Referencem=>m.Store.ColumnStoreId,并且我调用SchemaExport,那么我的数据库表包含两个外键列,一个名为“StoreId”,另一个名为“Store\u id” 如果我离开Column方法,那么它只会创建“Store\u id”列 这是FluentNHibernate框架中的一个bug吗? 我只想要“StoreId”列 提前谢谢 public class EntityMap<T> : ClassMap<T> wher

如果我的类映射包含Referencem=>m.Store.ColumnStoreId,并且我调用SchemaExport,那么我的数据库表包含两个外键列,一个名为“StoreId”,另一个名为“Store\u id”

如果我离开Column方法,那么它只会创建“Store\u 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();
    }
}

这不是一个bug,如果在默认情况下离开列nHiBiEnter考虑您的外键是属性名+下划线+ ID,则是NHHiBiLead的左栏,将您映射的属性名称为“存储和合并”到“id ID/p>”。 对于HasMany,必须在StoreMap中添加.KeyColumnStoreId 这张地图看起来像这样

public StoreMap()
{
    Map( m => m.Name );
    HasMany( m => m.Staff )
        .Inverse()
        .Cascade.All().KeyColumn("StoreId");
    HasManyToMany( m => m.Catalogue )
        .Table( "Store_Product" )
        .Cascade.All();
}

现在找到了解决方案,尽管我在任何地方都没有描述

必须将列设置为双向。然后,“存储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();
    }
}

您应该发布存储和另一个类(引用存储的类)的映射。谢谢您的回答。我已经用映射类更新了我的帖子。你有没有其他链接到你的商店类,而你没有在这里发布?另外,请尝试将您的商店地图更改为Idm=>m.Id.ColumnStoreid我已经更新了我的第一篇文章。现在是整个班级地图。我想保留实体Id的名称为“Id”。请尝试在HasManyToMany上使用ParentKeyColumn和ChildKeyColumn谢谢您的回答。所以你说不可能像我想要StoreId而不是Store_id那样命名外键列?在你的映射中,你必须删除inverse才能正常工作,因为inverse会使你的映射生成两个外键。我不这么认为。Inverse只告诉员工进行存储,不应该与FK有任何关系。虽然,我实验性地删除了它,但它仍然是“Store\u id”。我更新了我的答案,您必须添加。Store Map中的KeyColumnStoreId尝试过,仍然得到两个FK列,其中只有“Store\u id”列将被设置,“StoreId”始终为空。