2011-09-26 43 views
0

POST編輯 - 見下文流利Automapper問題與標籤創建

編輯我有一個流暢的自動映射其作爲夏普架構的一部分查詢。運行其中一個測試用例將生成一個模式,我可以使用它在我的數據庫中創建表。

我正在開發一個帖子,以及與這些帖子相關的標籤。我希望標籤能夠與多個帖子相關聯,並且每個帖子都有0個或多個標籤。

我想實現的DB模式:

郵政{ID,標題,SubmitTime,內容}

標籤{ID,名稱}

PostTag {帖子ID,標籤識別}

相反,我得到:

發表的內容{Id,Title,SubmitTime,Content}

標記{ID,名稱,帖子ID(FK)}

我用鋒利的架構,並可類如下所示(或多或少):

public class Post : Entity 
{ 
    [DomainSignature] 
    private DateTime _submittime; 
    [DomainSignature] 
    private String _posttitle; 

    private IList<Tag> _taglist; 

    private String _content; 

    public Post() { } 

    public Post(String postTitle) 
    { 
     _submittime = DateTime.Now; 
     _posttitle = postTitle; 
     this._taglist = new List<Tag>(); 
    } 


    public virtual DateTime SubmitTime { get { return _submittime; } private set { _submittime = value; } } 

    public virtual string PostTitle { get { return _posttitle; } private set { _posttitle = value; } } 

    public virtual string Content { get { return _content; } set { _content = value; } } 

    public virtual IList<Tag> TagList { get { return _taglist; } set { _taglist = value; } } 




public class Tag : Entity 
{ 
    [DomainSignature] 
    private String _name; 

    public Tag() { } 

    public Tag(String name) 
    { 
     this._name = name; 
    } 

    public virtual String Name 
    { 
     get { return _name; } 
     private set { _name = value; } 
    } 

    public virtual void EditTagName(String name) 
    { 
     this.Name = name; 
    } 

} 

我可以看到它爲什麼走了建立它的數據庫模式,因爲有時候對象只能作爲另一部分存在。但標籤可以單獨存在。

我該如何去實現這一目標?我對MVC,Nhibernate和SHarp架構等都很陌生,所以任何幫助都會非常感謝!

編輯 *

OK,我現在已經稍微調整我的班。我的問題是我期待推斷中間表。相反,我意識到我必須創造它。 所以我現在(我已經簡化了類稍有提高可讀性的緣故:

class Post : Entity 
{ 
[DomainSignature] 
String Title 
[DomainSignature] 
DateTime SubmitTime 
IList<PostTag> tagList 

} 

class Tag : Entity 
{ 
[DomainSignature] 
string name 
} 

class PostTag : Entity 
{ 
[DomainSignature] 
Post post 
[DomainSignature] 
Tag tag 
} 

這讓我對與通常的郵政和變量表沿着中間實體的模式:

PostTag{id, name, PostId(FK)} 

上面的問題是,它仍然不包含Tag的外鍵,而且它應該真的有一個ID列,因爲它是一個關係表?我認爲它應該是一個組合鍵,它由來自Post和Tag表格的PK。

我敢肯定,通過向Tag類

IList<PostTag> postList 

我會得到另一個FK加入PostTag模式,但我不想添加上面,作爲postList可能是巨大的。我不需要每次向系統中添加帖子。我會有一個單獨的查詢來計算這種信息。

任何人都可以幫我解決這最後一部分?謝謝你的時間。

回答

0

好吧,我一直認爲模擬域中的複合類是前進的方向,但我終於遇到了一些automapper覆蓋代碼,它創建了複合表,而無需創建類這,這是什麼,我首先想到的問題:

公共類PostMappingOverride :IAutoMappingOverride { 公共無效覆蓋(自動映射圖) {

  map.HasManyToMany(e => e.TagList) 
       .Inverse() 
       .Cascade.SaveUpdate(); 
     } 
    } 

這將會給現在我我的架構(以下架構簡化非):

create table Posts (
    Id INT not null, 
    PublishTime DATETIME null, 
    SubmitTime DATETIME null, 
    PostTitle NVARCHAR(255) null, 
    Content NVARCHAR(255) null, 
    primary key (Id) 
) 

create table Posts_Tags (
    PostFk INT not null, 
    TagFk INT not null 
) 

create table Tags (
    Id INT not null, 
    Name NVARCHAR(255) null, 
    primary key (Id) 
) 

alter table Posts_Tags 
    add constraint FK864F92C27E2C4FCD 
    foreign key (TagFk) 
    references Tags 

alter table Posts_Tags 
    add constraint FK864F92C2EC575AE6 
    foreign key (PostFk) 
    references Posts 

我覺得運動員就是我一直在尋找一個一對多的關係,這是,但這裏所說的HasManytoMAny ...