0
죄송합니다. 내 뇌가 지금 튀겨지면 죄송합니다. 난 그냥, NHibernate에 프로그래밍을 시작하기 때문에 자동 매핑의 유창함 NHibernate에로 이동하기로 결정하지만 약간의 문제가있어, 여기의 관계입니다 그것은이 있어야합니다 여기 Fluent NHibernate atutomapping, 간단한 질문, 외래 키 관계에 대한 추가 필드가 추가되었습니다

관계가 내 규칙에서 역으로 설정 되었기 때문에이 값을 추측 할 수 있습니다. 관계를 inverse()로 만들거나 캐스케이드가 작동하지 않게해야했습니다. 여기 내 규칙은 다음과 같습니다
public class HasManyConvention : IHasManyConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IOneToManyCollectionInstance instance)
{
instance.Key.Column(instance.EntityType.Name + "ID");
//instance.Inverse();
if (instance.Member.GetCustomAttributes(typeof(CascadeAttribute), false).Length <= 0)
{
instance.Cascade.None();
return;
}
var cascadeOption = (CascadeAttribute)instance.Member.GetCustomAttributes(typeof(CascadeAttribute), false)[0];
switch (cascadeOption.CascadeOption)
{
case Enums.CascadeOptions.All:
instance.Cascade.All();
break;
case Enums.CascadeOptions.AllDeleteOrphan:
instance.Cascade.AllDeleteOrphan();
break;
case Enums.CascadeOptions.Delete:
instance.Cascade.All();
break;
case Enums.CascadeOptions.DeleteOrphan:
instance.Cascade.DeleteOrphan();
break;
case Enums.CascadeOptions.None:
instance.Cascade.None();
break;
case Enums.CascadeOptions.SaveUpdate:
instance.Cascade.SaveUpdate();
break;
}
}
}
public class ReferenceConvention : IReferenceConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IManyToOneInstance instance)
{
instance.Column(instance.Property.Name + "Fk");
if (Attribute.IsDefined(instance.Property.PropertyType.Assembly, typeof(DomainSignatureAttribute)))
instance.UniqueKey("DomainSignature");
else
instance.Index(instance.Property.Name + "Index");
}
}
그리고 내 두 엔티티 :
public class Member : Entity
{
public Member()
{
Mail = new List<Mail>();
}
[Cascade(Enums.CascadeOptions.All)]
public virtual IList<Mail> Mail
{
get; set;
}
}
public class Mail : Entity
{
public virtual Member Receiver
{
get; set;
}
public virtual Member Sender
{
get; set;
}
public virtual string Subject
{
get;
set;
}
public virtual string Body
{
get; set;
}
}
이유는 무엇입니까는 수신기와 발신자는 회원 테이블에 외래 키는 것을 분명 능통 자 NHibernate 맵 MEMBERID?
@Eitan, 그는 당신이 결코 그 관계가 어떻게 매핑되어야 하는지를 명시하지 않았다는 것을 의미합니다. 그래서 그것은 관습에 따라 MemberId를 호출하는 표준 외래 키를 가정합니다. – Vadim
@Eitan : Inverse는 관계가 다른 관계에 중복되므로 저장 될 필요가 없음을 의미합니다. 그것은 데이터베이스 모델을 변경하지 않지만 양방향 참조를 원할 경우 inverse를 사용해야합니다. –