내 도메인 자동 매핑이 작동했지만 이제 NHibernate 스택을 업데이트 할 때 세션 팩토리가 구축 중일 때 매핑 예외가 발생합니다. 구성은 :many-to-many 속성 'Users'의 다른 쪽이 무엇인지 알아낼 수 없음
01,"다른 쪽의 은 다 대다 재산 '사용자' 이 있어야 할 알아낼 수 없습니다."
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)에서
질문은 오토 맵핑을 사용하여 다 대다 관계를 올바르게 처리하는 방법입니다.
참고 : 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
);
내가 ID와 테이블과 데이터 구조를 가지고 : http://picasaweb.google.com/lh/photo/eqlcpbYfEc2R0doCjsEdDg?authkey=Gv1sRgCMas5N_E08Dx6wE&feat=directlink – csizo
내가 fluent- 일부 버전의 문제가 있었다 것 같다 nhibernate 구성 요소 ... 버전 2.1을 픽업했습니다. : – csizo
id 컨벤션 문제 였어? –