1

이 같은 두 테이블이 있습니다, 그럼 내가이 같은 도메인 클래스를 생성했다FluentNHibernate 매핑 같은 기본 키

TABLE ARTICLE 
Id int NOT_NULL PK 
Title nvarchar(50) NOT_NULL 

TABLE CONTENT 
Id int NOT_NULL PK 
content nvarchar(MAX) NOT_NULL 
remarks nvarchar(200) 

는 각각의 문서는 문서 PK ID와 같은 PK ID로 내용이됩니다 :

public class ArticleMap : ClassMap<Article> 
{ 
    public ArticleMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Title); 
     Reference(x => x.Content).ForeignKey("Id"); 
    } 
} 

public class ContentMap : ClassMap<Content> 
{ 
    public ContentMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.content); 
     Map(x => x.remarks); 
    } 
} 

내가 테이블에 데이터를 읽을 않았지만,와 끝까지 :

public class Article { 
    public virtual int Id {get; set;} 
    public virtual string Title {get; set;} 
    public virtual Content Content {get; set;} 
} 

public class Content { 
    public virtual int Id {get; set;} 
    public virtual string content {get; set;} 
    public virtual string remarks {get; set;} 
} 

나는 이런 식으로이 클래스를 매핑하려고 NHibernate.ObjectNotFoundException. 내 경우에 어떻게 외래 키가없는 클래스를 매핑해야하지만 동일한 PK Id 값을 기반으로하는 다른 테이블에 조인해야합니다. 누군가 이걸 어떻게 작동시키는 지 안내 해줄 수 있습니까? 당신이 일을 찾고 있기 때문에 당신의 매핑

References(x => x.Content).Table("Content").KeyColumn("Id"); 
+1

왜 당신이 그런 식으로 일을 대신 조에서 콘텐츠에 대한 외래 키가 있습니까? –

+0

FK를 지정하지 않았으므로'ForeignKey ("Id")'대신'Column ("Id")'를 사용하려고 했습니까? 그것은 단지 짐작하지만 ... –

+0

@ColmPrunty 나는 ORM을 사용하기 위해 그것을 마이그레이션합니다. 그래서 그것을 바꾸고 싶지 않습니다. –

답변

5

테이블과 키를 지정

+0

감사합니다. 작동하지만 문제가 발생했습니다. 'id를 할당하려고 시도했습니다. Article 1 –

+1

나는 Content.Article = newArticle을 지정해야한다는 것을 알아 냈다. –

0

시도 : 1의 관계는, 당신의 매핑은 명확하게 할 필요가있다.

먼저 콘텐츠는 부모 기사에 대해 알아야합니다. 속성을 공개하지 않으려면 protected internal을 사용하거나 Reveal을 매핑에 사용할 수 있습니다. 이 경우, 당신은 NHibernate를위한 빈 생성자와 Article을 받아들이는 생성자가 필요할 것이다.

public class Content { 
    public virtual Article { get; set; } 
     //other properties 
} 

또한

public class ArticleMap : ClassMap<Article> 
{ 
    public ArticleMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Title); 
     HasOne(x => x.Content).Cascade.All(); 
} 


public class ContentMap : ClassMap<Content> 
{ 
    public ContentMap() 
    { 
     Id(x => x.Id).GeneratedBy.Foreign("Article"); 
     HasOne(x => x.Article).Constrained().ForeignKey(); 
     Map(x => x.content); 
     Map(x => x.remarks); 
    } 
} 

참조 같은 당신의 매핑은 다음과 같습니다 http://marcinobel.com/index.php/fluent-nhibernate-mapping-one-to-on-relation/

+0

' 참조()' –

+0

HasMany()를 찾고 있었어요 –

+1

'References (x => x.Content) .Column ("Id")를 사용해보십시오 NotFound.Ignore();'내용이없는 기사가 있습니까? ? –