none
entity framework 繼承問題 RRS feed

  • 問題

  • file(post_id, file_id, file_name, file_type)
    hyperfile(hyperlink)
    realfile(path)

    hyperfile、realfile都已繼承至file。我用的是table per type方式做繼承

    若今天有一筆資料post_id=1,file_id=1,file_name=1.rar,file_type=1(hyper),hyperlink=http://www.google.com.tw/1.rar

    我如何用post_id就取得他的hyperlink呢?
    linq該如何下?

    因為hyperfile是繼承的關係,所以這個table也沒有file_id的屬性了…

    查過一些資料,可用oftype<>()來做,可是我覺得很奇怪,用oftype不就表示你已經知道這個file是hyper或real的了
    可是我是想透過post_id來知道他是hyper還是real的…

    請幫我解答^^謝謝

    2010年1月5日 上午 04:06

解答

  • 你這邊所指得post_id是否是用來判別hyper還是real?
    如是
    一樣的問題
    既然是用此欄位來判斷類型.
    不就等同於使用oftype<>(),反而是post_id多餘的

    你會這麼想,表示你在設計EF時還是用資料庫角度,而非使用物件導向方式來構想.
    EF是一種ORM的產品,使用這類ORM產品的前提是程式撰寫與設計上要採用物件導向方式處理,如果程式還是使用程序式方式撰寫,使用EF並不會有太大效益,大多數在這種狀況下,使用EF弊遠大於利.

    使用EF的前提是先把程式設計的模式轉到物件導向開發再來使用會比較恰當.
    • 已標示為解答 howard730423 2010年1月5日 上午 11:02
    2010年1月5日 上午 06:07

所有回覆

  • 你這邊所指得post_id是否是用來判別hyper還是real?
    如是
    一樣的問題
    既然是用此欄位來判斷類型.
    不就等同於使用oftype<>(),反而是post_id多餘的

    你會這麼想,表示你在設計EF時還是用資料庫角度,而非使用物件導向方式來構想.
    EF是一種ORM的產品,使用這類ORM產品的前提是程式撰寫與設計上要採用物件導向方式處理,如果程式還是使用程序式方式撰寫,使用EF並不會有太大效益,大多數在這種狀況下,使用EF弊遠大於利.

    使用EF的前提是先把程式設計的模式轉到物件導向開發再來使用會比較恰當.
    • 已標示為解答 howard730423 2010年1月5日 上午 11:02
    2010年1月5日 上午 06:07
  • 謝謝你一直幫我回答^^

    post_id不是用來判別hyper或real,是透過file_id

    所以當我從上一個頁面傳post_id過來時,要去file的table裡用post_id去找對應的file_id
    有了file_id,再用這個file_id去hyperfile或去realfile的table裡找出它的link

    file(post_id, file_id, file_name)
    hyperfile(file_id, hyperlink)
    realfile(file_id, path)

    所以有了post_id並不知道是hyper或real。

    我是程式上的新手,不管是.net還是oo

    不過我想,hyperfile和realfile都繼承了file,所以hyperfile和realfile都有了file的屬性:post_id、file_id

    所以在程式中須要找出file_id    where post_id==傳入的id參數

    再用file_id去找出link

    我不懂的地方是有了file_id,要抓出link時,不知道是要select hyperlink還是select path…

    可能是我不大懂oo的觀念,所以這部份也搞不大對

    謝謝你的回答^^
    2010年1月5日 上午 08:30
  • 了解你的問題所在了
    你在DB設計上有些錯誤,你的設計方式並非是繼承,所以之前你問的問題大多都是因此產生
    應該改成如下
    file(post_id, file_name)
    hyperfile(post_id, hyperlink)
    realfile(post_id, path)

    資料表file中的file_id沒需要
    post_id在各Table都是PK,而hyperfile與realfile跟file透過post_id作關聯,且關聯為(file)1 -> 0..1(hyperfile,realfile)

    EF支援的繼承模式與觀念可參考
    http://columns.chicken-house.net/post/EF3-Entity-Inheritance.aspx



    如果如上所述你是程式設計新手,建議現階段不要使用EF,原因如之前詳述,改用ADO.Net先學好程式,並了解OO的語法與觀念,再開始使用EF會比較恰當.
    2010年1月6日 上午 12:09