2010-03-05 5 views
2

FluentNHibernate에서 누군가 도와 드릴 수있는 문제가 발생했습니다.FluentNHibernate는 다른 컴퓨터에서 다르게 작동합니다.

CampaignAreas 및 CampaignProducts라는 두 클래스 사이에 다 대다 관계가 있습니다. 슬프게도 Fluent는 제 동료의 테이블과 같은 테이블 이름으로 관계 테이블을 매핑하지 않습니다. 캠페인 이름은 CampaignProductsToCampaignAreas 및 CampaignAreasToCampaignProducts입니다.

우리는 NH의 코드와 동일한 DLL, 유창한 DLL 등을 가지고 있으며 IIS를 여러 번 다시 빌드하고 재설정했기 때문에 기본적인 것들은 아닙니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

+1

자동 매핑을 사용하고 있습니까? 아니면 수동으로 매핑하고 있습니까? –

답변

2

와 대다 테이블의 이름을이 규칙을 사용, 이중에서 테이블 이름을 지정 일부 레이스 조건이 있었다 - 방향 다 대 다 관계; FNH는 먼저 관계의 어느 쪽을 먼저 선택했는지 그리고 어떤 이유에서든 .Net은 그들을 다른 순서로 제공 할 것입니다 (우리는 단지 Assembly.GetTypes()라고 부릅니다).

어쨌든, 나는 빗 나간다. 최신 버전의 FNH로 업그레이드하십시오. Maggie's suggestion을 따르고 규칙을 사용하여 테이블 이름을 제어하는 ​​것이 좋습니다.

+0

나는 기독교인과 같은 문제를 겪고있다. 나는 FHN v.1.2와 당신이 제안한 것과 비슷한 many-to-many 규칙을 사용하고 있지만 FHN은 여전히 ​​내 컴퓨터와 동료 컴퓨터에 다른 테이블 이름을 생성합니다. 명시 적으로 테이블 이름을 설정하는 것 외에도 할 수있는 것이 있습니까? – Gh0sT

0

잘 모르겠습니다 만 다 대 다 관계의 테이블 이름을 지정할 수 있어야합니다. 이것은 어쨌든 깨끗합니다.

+1

문제는지도를 직접 작성하는 것을 피하려고합니다. 자동 매핑이 작동하므로 한 시스템에서 이름을 변경하는 것 외에 문제가 발생합니다. –

1

난 당신이 사용하고 유창함 자 NHibernate의 버전에 따라 자동 매핑

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); 
    } 
    } 
관련 문제