首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FluentNHibernate Bug和ColumnName?

FluentNHibernate Bug和ColumnName?
EN

Stack Overflow用户
提问于 2011-12-27 22:01:43
回答 2查看 433关注 0票数 0

如果我的ClassMap包含一个引用(m => m.Store).Column("StoreId"),我调用SchemaExport,那么我的数据库表包含两个外键列,一个名为'StoreId‘,一个名为'Store_id’。

如果我离开Column()方法,那么它只会创建'Store_id‘列。

这是FluentNHibernate框架中的一个bug吗?我只想要“StoreId”专栏。

提前谢谢。

代码语言:javascript
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-30 13:32:52

现在找到了解决办法,尽管我找的地方都没有描述。

必须设置列是双向的。然后"Store_id“列消失。谢谢大家的回答!

就我上面的例子而言:

代码语言:javascript
复制
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();
    }
}
票数 0
EN

Stack Overflow用户

发布于 2011-12-28 06:24:29

这不是一个bug,如果在默认情况下离开列() nhibernate,假设您的外键是属性Name+underscore+id,则您是leave列-- nhhibernate采用您被映射为Store的属性名称并合并到_id

您必须将.KeyColumn("StoreId")添加到StoreMap for HasMany中,地图如下所示

代码语言:javascript
复制
public StoreMap()
{
    Map( m => m.Name );
    HasMany( m => m.Staff )
        .Inverse()
        .Cascade.All().KeyColumn("StoreId");
    HasManyToMany( m => m.Catalogue )
        .Table( "Store_Product" )
        .Cascade.All();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8649750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档