2010-02-11 1 views
0

내 도메인 자동 매핑이 작동했지만 이제 NHibernate 스택을 업데이트 할 때 세션 팩토리가 구축 중일 때 매핑 예외가 발생합니다. 구성은 :many-to-many 속성 'Users'의 다른 쪽이 무엇인지 알아낼 수 없음

"다른 쪽의 은 다 대다 재산 '사용자' 이 있어야 할 알아낼 수 없습니다."
C에 FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() 에서

:

예외가 많은지도

에 많은에 발생되어 전체 스택 추적이 하나입니다 : \ hornget.horn \ orm \ fluentnhibernate \ Working-2.1 \ src \ FluentNHibernate \ Cfg \ FluentConfiguration.cs : 라인 119에서
WebApplication1.NHibernateManager.Session
C에서 FactoryManager.BuildConfiguration (AutoPersistenceModel
persistanceModel) : \ WebProgramming 프로젝트 \ \ WebApplication1을 \ WebApplication1을 \ NHibernateManager SessionFactoryManager.cs \
WebApplication1.NHibernateManager.SessionFactoryManager.GetSessionFactory()
C시 라인 116 : \ WebProgramming 프로젝트 \ \ WebApplication1을 \ WebApplication1을 \ NHibernateManager SessionFactoryManager.cs \ 라인 71
WebApplication1.NHibernateManager.SessionManager.CloseSession()
시 C : \ WebProgramming 프로젝트 \ \ WebApplication1을 \ 웹 응용 1 \ NHibernateManager \ SessionManager.cs : 라인
C에서
WebApplication1.Global.Application_EndRequest (객체 송신자있는 EventArgs E)에서 47 : \ WebProgramming 프로젝트 \ \ WebApplication1을 \ WebApplication1을 \ Global.asax.cs : 라인
36
System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
System.Web.HttpApplication.ExecuteStep 때의
(IExecutionStep 단계 부울 & completedSynchronously)에서

01,

질문은 오토 맵핑을 사용하여 다 대다 관계를 올바르게 처리하는 방법입니다.
참고 : NHibernate/FluentNHibernate 스택을 업데이트하기 전에 매핑이 작동했습니다 ...DLL (1)

도메인 클래스 :

관련 정의는 다음과 접착되어

public class User : Entity 
{ 
// ... removed properties 

    public virtual IList<Role> Roles { get; protected set; }//has many 

// ... removed methods 
} 

public class Role : Entity 
{ 
// ... removed properties 

    public virtual IList<User> Users { get; protected set; }//has many 

// ... removed methods 
} 

Entity 클래스 (DLL 2)

/// <summary> 
/// Base Entity deffinition 
/// </summary> 
public abstract class Entity : IEquatable<Entity> 
{ 
    private int _Id = 0; 
    public virtual int Id { get { return _Id; } } 

    //... removed methods 
} 

public class PrimaryKeyConvention : IIdConvention 
{ 
    public void Apply(IIdentityInstance instance) 
    { 
     instance.Column(instance.EntityType.Name + "Id"); 
     instance.GeneratedBy.HiLo("100"); 
     instance.Access.ReadOnlyPropertyThroughPascalCaseField(PascalCasePrefix.Underscore); 

    } 
} 


public class ClassConvention : IClassConvention 
{ 
    public void Apply(IClassInstance instance) 
    { 
     instance.Table(Inflector.Pluralize(instance.EntityType.Name)); 
     instance.LazyLoad(); 
     instance.Cache.NonStrictReadWrite(); 
    } 
} 

많은 대회에 많은 :

public class ManyToManyConvention : IHasManyToManyConvention 
{ 
    public void Apply(IManyToManyCollectionInstance instance) 
    { 
     if (instance.OtherSide == null) 
     { 
      instance.Table(
       string.Format(
        "{0}To{1}", 
        Inflector.Pluralize(instance.EntityType.Name), 
        Inflector.Pluralize(instance.ChildType.Name))); 
      instance.Cascade.AllDeleteOrphan(); 
     } 
     else 
     { 
      instance.Inverse(); 
     } 
    } 

} 

모델 :

var persistanceModel = AutoMap.AssemblyOf<DataModelPaceholder>() 
     .AddEntityAssembly(typeof(Entity).Assembly) 
     .Conventions.AddFromAssemblyOf<ClassConvention>() 
     .UseOverridesFromAssemblyOf<DataModelPaceholder>() 
     .Setup(s => 
     { 
      s.SubclassStrategy = t => SubclassStrategy.JoinedSubclass; 
      s.IsComponentType = type => type == typeof(MoneyComponent); 
     }) 
     .IgnoreBase<Entity>() 
     .IgnoreBase<EntityAudit>() 
     //.IncludeBase<Product>() 
     .Where 
     (
      type => typeof(Entity).IsAssignableFrom(type) && !type.IsAbstract 
     ); 

답변

0

당신이 오토 기본 규칙에 따라 적절하게 명명 된 열이 UsersToRoles라는 접합 테이블이 있습니까? 예 : User_id, Role_id? 여기에 설명 된대로

+0

내가 ID와 테이블과 데이터 구조를 가지고 : http://picasaweb.google.com/lh/photo/eqlcpbYfEc2R0doCjsEdDg?authkey=Gv1sRgCMas5N_E08Dx6wE&feat=directlink – csizo

+0

내가 fluent- 일부 버전의 문제가 있었다 것 같다 nhibernate 구성 요소 ... 버전 2.1을 픽업했습니다. : – csizo

+0

id 컨벤션 문제 였어? –