Castle ActiveRecord 學習之 .net快速開發 (3)

來源:互聯網
上載者:User

三、添加表之間的關聯

現在要用ActiveRecord來體現Blog類和Post類在表中的關聯。
像我們以前說的那樣它們的關係是一對多和多對一的關係。前者我們要用到HasManyAttribute,而後者我們要用到BelongsToAttribute。
在Post 類中我們用到BelongsTo屬性
 1、我們在公告欄類(post)中需要包含進一個新的欄位和屬性來表明它是屬於哪一個部落格的。
如下增加:
[ActiveRecord]
public class Post : ActiveRecordBase<Post>
{
    ...
   
    private Blog blog;
   
    ...

    public Blog Blog
    {
        get { return blog; }
        set { blog = value; }
    }
2、現在我們要加BelongsToAttribute標識來告訴ActiveRecord它是一個多對一關聯性。這裡注意一下它的列名就是它對應的類名。在這裡我們不用BlogId是為了方便我們理解和應用,但在實際中它其實就是BlogId欄位。
[BelongsTo("BlogId")]
public Blog Blog
{
    get { return blog; }
    set { blog = value; }
}
這個是非常簡單的吧,現在我們來看一看另一張表的關係怎麼體現出來。
在Blog類中使用HasMany 標識
1、同樣我們需要新增一個欄位和屬性來記錄它包含哪些公告欄。
using System;
using System.Collections.Generic;
using Castle.ActiveRecord;

[ActiveRecord]
public class Blog : ActiveRecordBase<Blog>
{
    ...
   
    private IList<Post> posts = new List<Post>();
   
    ...

    public IList<Post> Posts
    {
        get { return posts; }
        set { posts = value; }
    }
2、添加HasManyAttribute 標識來告訴ActiveRecord它是一對多關聯性:
[HasMany]
public IList<Post> Posts
{
    get { return posts; }
    set { posts = value; }
}
這個HasManyAttribute是一個有用的屬性當你想控制如下的映射關係的時候,比如:當這兩個類的關聯是雙向的時候,那麼哪一方應該完全控制這個關聯呢?這時候你想到的是在部落格(Blog)類中包含欄目類(Post)(blog.post)還是在欄目類(Post)中包含部落格類(Blog)(post.blog)?我會說用Post.Blog方案是可行的。(在部落格類中的post)這個欄目只是資訊,而且它是唯讀。所以這個時候我們可以把以上的資訊用Inverse設定到我們的標識當中:
[HasMany(Inverse=true)]
public IList<Post> Posts
{
    get { return posts; }
    set { posts = value; }
}
你也許會想到級聯。在用Nhibernate的時候當你刪除某一個部落格的時候(Blgo)類的時候(舉個例子)會發生什麼嗎?我們會說,刪除該部落格所擁用的欄目:
[HasMany(Inverse=true, Cascade=ManyRelationCascadeEnum.AllDeleteOrphan)]
public IList<Post> Posts
{
    get { return posts; }
    set { posts = value; }
}
另外你應該知道(如果如上設定了):Castle ActiveRecord 會自動根據這一列來找到映射的另一邊。這完全是可能的因為在它的另一邊(post)同樣有一個屬性BelongstoAtrribute 指回了Blog類。如果你不想這樣(在Post 中加BelongstoAtrribute屬性),那麼你不得不在(Blog)表中包含以下資訊,它應該這樣寫了:
[HasMany(
    Table="Posts", ColumnKey="blogid",
    Inverse=true, Cascade=ManyRelationCascadeEnum.AllDeleteOrphan)]
public IList<Post> Posts
{
    get { return posts; }
    set { posts = value; }
}
現在我們就開始寫一個架構,並且引用我們以上所寫的代碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.