2011-05-06 3 views
0

Castle ActiveRecord를 기존 데이터베이스에 연결하고 일대 다 관계를 연결하는 데 문제가 있습니다. 문제는 외래 키가 다른 테이블의 기본 키를 참조하지 않고 다른 열을 사용한다는 것입니다.성 기본 키를 사용하지 않는 성 ActiveRecord 관계

CREATE TABLE [Rule](
    [ID] [uniqueidentifier] NOT NULL, 
    [HeadingID] [int] NULL 
) 

CREATE TABLE [Heading](
    [ID] [uniqueidentifier] NOT NULL, 
    [ID2] [int] NOT NULL 
) 

규칙 테이블의 HeadingID 필드는 제목의 ID2 필드를 참조하는 외래 키 :

은 (명확성을 위해 단축) 테이블입니다.

그래서, 규칙 클래스의 정의에 내가 가진 : (I 물론 게으른 hasMany의를 설정 한 경우)

[BelongsTo(Column = "HeadingID", PropertyRef = "OrderID")] 
public virtual Heading Heading { get; set; } 

이 잘 작동하는 것 같다, 나는 문제없이 규칙의 제목에 액세스 할 수 있습니다 . 제목 클래스 정의에서

내가 가진 : 나는 컬렉션에 액세스 할 때

[HasMany(Lazy = true)] 
public IList<Rule> Rules { get; set; } 

는 내가 SQL 예외를 얻을 "피연산자 유형 충돌 : 고유 식별자는 INT와 호환되지 않습니다." 은 AR과 같은 (명확성을 위해 단순화)이 같은 선택을 할 시도 :

SELECT ... FROM Rule rules0_ ... WHERE rules0_.HeadingID = ? 

어디? Heading.ID의 GUID입니다 (Heading.ID2의 int 여야 함).

HasMany에서 외래 키가 참조하는 열을 설정할 수있는 속성을 찾을 수 없습니다. 이 일을 할 수있는 방법이 있습니까?

답변

0

이것이 수행되지 않는 것으로 보입니다. 내가 할 수있는 최선의 방법은 맞춤 검색입니다.

public virtual IEnumerable<Rule> Rules { 
    get { 
     return Rule.Queryable.Where(x => x.Heading == this); 
    } 
} 

이 방법은 저에게 적합합니다.

관련 문제