2011-08-28 5 views
1

특성과의 관계 :FNH 대다 나는 다음과 같은 세 개의 테이블이

내용 :

public class Content 
{ 
    public Content() 
    { 
     ContentFieldItems = new List<ContentFieldItem>(); 
     ContentFields = new Dictionary<ContentField, ContentFieldItem>(); 
     People = new List<Person>(); 
    } 

    public virtual int id { get; set; } 
    public virtual int categoryid { get; set; } 
    public virtual int userid { get; set; } 
    public virtual DateTime? date { get; set; } 
    public virtual int status { get; set; } 
    public virtual IDictionary<ContentField, ContentFieldItem> ContentFields { get; set; } 
    public virtual IList<ContentFieldItem> ContentFieldItems { get; set; } 
    public virtual IList<Person> People { get; set; } 
    public virtual string title { get; set; } 
} 

public class ContentMap : ClassMap<Content> 
{ 
     Id(x => x.id); 
     Map(x => x.categoryid); 
     Map(x => x.userid); 
     Map(x => x.date); 
     Map(x => x.status); 
     Map(x => x.title); 

     HasMany<ContentFieldItem>(x=>x.ContentFields) 
      .Table("ContentFieldItem") 
      .KeyColumn("contentid") 
      .AsMap(f => f.ContentField) 
      .Component(c => 
      { 
       c.ParentReference(m => m.Content); 
       c.References(m => m.ContentField); 
       c.Map(m => m.fieldadditionalinfo); 
       c.Map(m => m.fieldvalue); 
      }) 
      .Inverse() 
      .Cascade.AllDeleteOrphan(); 

      ... 
} 

ContentField :

public class ContentField 
{ 
    public ContentField() 
    { 
     Contents = new List<Content>(); 
    } 

    public virtual int id { get; set; } 
    public virtual string field { get; set; } 
    public virtual IList<Content> Contents { get; set; } 

    public virtual void AddContentField(Content content, 
     ContentFieldItem contentfielditem) 
    { 
     Contents.Add(content); 
     content.ContentFields.Add(this, contentfielditem); 
    } 
} 

public class ContentFieldMap : ClassMap<ContentField> 
{ 
    public ContentFieldMap() 
    { 
     Id(x => x.id); 
     Map(x => x.field); 
     Map(x => x.categoryid); 
     Map(x => x.status); 
     Map(x => x.type); 
     Map(x => x.showonall); 
    } 
} 

ContentFieldItem :

public class ContentFieldItem 
{ 
    public virtual int id { get; set; } 
    public virtual string fieldvalue { get; set; } 
    public virtual string fieldadditionalinfo { get; set; } 
    public virtual Content Content { get; set; } 
    public virtual ContentField ContentField { get; set; } 
} 

public class ContentFieldItemMap : ClassMap<ContentFieldItem> 
{ 
    public ContentFieldItemMap() 
    { 
     Id(x => x.id); 
     Map(x => x.fieldvalue); 
     Map(x => x.fieldadditionalinfo); 
     References(x => x.Content, "contentid"); 
     References(x => x.ContentField, "fieldid"); 
    } 
} 

을 sa의 세 테이블 나도 서로 관련성이있는 방법을 만들고 싶다. fieldid 및 일부 더 많은 매개 변수를 통해 contentid 및 ContentField를 통해 Content를 통해 ContentFieldItem을 만들고 싶습니다. 매개 변수가없는 many-to-many를 사용하여 수행 할 수 있다고 생각하지만 매개 변수와 관련이 있습니다. 어떻게 유창한 nhibernate를 사용하여이 작업을 수행 할 수 있습니까? ?

이제 "Project.Models.ContentField의 유형을 결정할 수 없습니다."가 표시됩니다.

+0

'hasMany의은 (X => x.ContentFields)이'hasMany의 (X => x.ContentFields)'또는이어야 도움 'hasMany의 (X => X .ContentFields)' – Firo

+0

무엇이'IList ContentFieldItems'에 좋은가요? 'ContentFields.Values'는 동일한 결과를 제공합니다 – Firo

+0

두 가지 방법으로 같은 오류가 발생했습니다 .. –

답변

0

내가

public class Content 
{ 
    public virtual int Id { get; set; } 

    public virtual string Title { get; set; } 
    public virtual IDictionary<ContentField, ContentFieldInfo> Fields { get; set; } 
} 

public class ContentField 
{ 
    public virtual int Id { get; set; } 

    public virtual string Name { get; set; } 
} 

public class ContentFieldInfo 
{ 
    public virtual Content Content { get; set; } 
    public virtual ContentField Field { get; set; } 

    public virtual string Values { get; set; } 
    public virtual string AdditionalInfo { get; set; } 
} 

class ContentMap : ClassMap<Content> 
{ 
    public ContentMap() 
    { 
     Id(...); 

     Map(c => c.Title); 

     HasMany(c => c.Fields) 
      .Table("ContentFieldItem") 
      .KeyColumn("contentid") 
      .AsMap(fieldinfo => fieldinfo.Field) 
      .Component(comp => 
      { 
       comp.ParentReference(fi => fi.Content); 
       comp.References(fi => fi.ContentField); 
       comp.Map(fi => fi.Value); 
       ... 
      }); 
    } 
} 

class ContentFieldMap : ClassMap<ContentField> 
{ 
    public ContentFieldMap() 
    { 
     Id(...); 

     Map(c => c.Name); 
    } 
} 

당신이 ContentField through fieldid and some more parameters.과 의미를 명확히 할 수 할 것?

희망이

+0

그저 잘못된 문장입니다. 메신저 "형식을 확인할 수 없습니다 : Project.Models.ContentField"오류 및 couldnt 아직 해결할 수 있습니다. –

+0

@bakbeyimsanaikiciftlafimvar : sessionfactory에 ContentFieldMap을 추가 했습니까? – Firo

+0

예. 나는 다음을 추가했다 : x.FluentMappings.AddFromAssemblyOf (); –

관련 문제