2012-03-13 2 views
0

참조에는 많은 리드가 있습니다. 그러나 엔티티는 상담원 식별자와 관련이 있습니다. 내 참조 엔티티 내에서 올바르게 매핑을 만들기 위해 agent_id 열에 매핑 된 정수 속성을 추가해야했습니다.Fluent-Nhibernate HasMany 객체에 대한 속성 참조

나는 기업에서 AgentID 속성을 제거하고 그래서 같이 "에이전트"개체에 매핑을 수행하는 경우 :

HasMany(x => x.Leads) 
     .AsBag() 
     .KeyColumn("Agent_Id") 
     .PropertyRef("Agent"); 

를 나는 오류로 실행

Object does not match target type.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Reflection.TargetException: Object does not match target type.

가 나는 것 같아요 이것이 받아 들일만한 해결책이냐고 묻는다면? 추가 AgentID 등록 정보는 등록 정보 참조 이외의 다른 곳에서 사용되지 않습니다. 현재 도메인 모델을 변경할 수 없으므로이 매핑을 수행 할 수있는 다른 방법이 도메인 모델을 변경해야합니다.

실무 매핑 :

public class Referral 
{ 
    public virtual int Id { get; set; } 
    public virtual int AgentID { get; set; } 
    public virtual Agent Agent { get; set; } 
    public virtual int? PositionNumber { get; set; } 
    public virtual DateTime? LastReferralDate { get; set; } 
    public virtual Account Account { get; set; } 

    public virtual IEnumerable<Lead> Leads { get; set; } 
} 

public ReferralMap() 
{ 
    Table("Referral"); 
    LazyLoad(); 
    Id(x => x.Id).GeneratedBy.Identity().Column("Id"); 
    Map(x => x.PositionNumber).Column("PositionNumber"); 
    Map(x => x.LastReferralDate).Column("LastReferralDate"); 
    Map(x => x.AgentID).Column("Agent_ID"); 
    References(x => x.Agent).Column("Agent_ID"); 
    References(x => x.Account).Column("Account_id"); 

    HasMany(x => x.Leads) 
     .AsBag() 
     .KeyColumn("Agent_Id") 
     .PropertyRef("AgentID"); 

} 

답변

1

이이 문제가없는 동안 내가 대신

public LeadMap() 
{ 
    CompositeId().KeyReference(l => l.Agent, "Agent_Id"); 
} 
+0

감사 FIRO의

public LeadMap() { Id(l => l.AgentId).Column("Agent_Id"); } 

을 가지고 있기 때문에 추측 나를 올바른 방향으로 가리켰다. 필요하지 않은 항목에 대한 조인을 지정하는 대신 수식 매핑 .Formula ("(l.Agent_id = Agent_ID)에서 리드 수에서 * 선택)를 사용하는 것이 더 쉽다는 것을 알게되었습니다. – Jesse

관련 문제