FluentNHibernate Ошибка с ColumnName? - PullRequest
0 голосов
/ 28 декабря 2011

, если мой ClassMap содержит Reference (m => m.Store) .Column ("StoreId") , и я вызываю SchemaExport, тогда моя таблица базы данных содержит два столбца внешнего ключа, один с именем StoreId. и один с именем 'Store_id'.

Если я оставлю метод Column (), то он только создаст столбец 'Store_id'.

Это ошибка в платформе FluentNHibernate? Я хотел бы иметь только столбец 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();
    }
}

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Нашел решение сейчас, хотя я его нигде не описал.

Вы должны установить двунаправленный столбец. Тогда столбец «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();
    }
}
0 голосов
/ 28 декабря 2011

Это не ошибка, если оставить column () nhibernate по умолчанию, учитывая, что ваш внешний ключ - Имя свойства + подчеркивание + id, вы оставляете столбец именем свойства взятия nhhibernate, которому вы сопоставлены, с именем Store и сливаетесь с _id

Вы должны добавить .KeyColumn ("StoreId") в StoreMap для 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...