2010-03-05 3 views
2

У меня возникли проблемы с FluentNHibernate, и я надеюсь, что кто-то может мне помочь.FluentNHibernate действует по-разному на разных машинах

У меня есть отношения «многие ко многим» между двумя классами CampaignAreas и CampaignProducts. Sadly Fluent не сопоставляет таблицу отношений с тем же именем таблицы на моей машине, как и у моих коллег. Он называется CampaignProductsToCampaignAreas и CampaignAreasToCampaignProducts уважительно.

У нас есть одна и та же версия кода, те же DLL для NH, свободно и т. Д., И мы несколько раз перестраивали и перезагружали IIS, поэтому его не было ни одним из этих базовых материалов.

Любые идеи, как исправить это?

+1

Вы используете автоматическое сопоставление, или вы сопоставляете его вручную? –

ответ

2

В зависимости от версии Fluent NHibernate, который вы используете, были некоторые межрасовых условия с именования таблиц в би -направленные отношения «многие-ко-многим»; FNH использовал для выбора ту сторону отношений, которую он нашел в первую очередь, и по какой-либо причине .Net предоставил бы их в другом порядке (мы просто вызываем Assembly.GetTypes()).

В любом случае, я отвлекаюсь. Попробуйте обновить до последней версии FNH, и я также предлагаю вам следовать Maggie's suggestion и использовать соглашение для управления именованием таблиц.

+0

У меня такая же проблема, как у христианина. Я использую FHN v.1.2 и соглашение «много ко многим», аналогичное тому, что вы предлагаете, но FHN все еще генерирует разные имена таблиц на моей машине и машине моего коллеги. Есть ли что-нибудь еще, что я могу сделать, кроме того, что я устанавливаю имя таблицы явно? – Gh0sT

0

Я не знаю Свободно, но вы должны иметь возможность указывать имя таблицы отношения «многие ко многим». В любом случае это будет более чистым.

+1

Проблема в том, что я пытаюсь избежать написания самой карты. Автоматизация работает, поэтому проблема должна быть проблемой, кроме того, что она меняет имя на одной машине. –

1

Я использую эту конвенцию, чтобы назвать многие-ко-многим стол с Автоотображение

public class CustomManyToManyTableNameConvention : ManyToManyTableNameConvention 
    { 
    protected override string GetBiDirectionalTableName(IManyToManyCollectionInspector collection, IManyToManyCollectionInspector otherSide) 
    { 
     return String.Format("{1}{0}", collection.EntityType.Name, otherSide.EntityType.Name); 
    } 

    protected override string GetUniDirectionalTableName(IManyToManyCollectionInspector collection) 
    { 
     return String.Format("{1}{0}", collection.EntityType.Name, collection.ChildType.Name); 
    } 
    } 
Смежные вопросы