none
請問 Entity Framework 的 Entity object 規劃 RRS feed

  • 問題

  • 各位前輩好,
    目前遇到的資料庫規劃導致不曉得該如何設計 Entity,情形是這樣的:
    有一 Table,舉例:employee,而此 table 裡紀錄了許多相關資料的 ID 值,必須要Join到其他的Table才能取得相關名稱,而這個 Table 其中又有幾個較特殊的欄位,是經過 Sql statement 加密的,也就是該加密的欄位值,必須轉換成某個型態的資料再加上特定的數字,最後存成 varBinary,所以為了因應這種問題,我在SSDL使用了DefiningQuery,直接在取值時就先行解密,可是這時儲存時又會遇到問題,於是利用了Stroe procedure做寫入更新的動作
    現在就遇到了兩難,一就是為了要直接取到FK的值因此設定了Association   NavigationProperty,可是這時寫入更新時就會沒辦法用到那幾個ID值了,二就是為了要能順利寫入,於是就不設定NavigationProperty但是這樣變的每次要拿FK的值都要再撈一次,若是一次很多筆的employee的資料,將會嚴重的佔掉效能,真傷腦筋,請問像這樣情形的table schema該如何規劃呢?謝謝
    • 已編輯 Rockey Chen 2010年1月15日 上午 08:19 vBinary => varBinary
    2010年1月15日 上午 07:44

解答

  • 如果是這樣那你只需要將加解密程式定義在Entity class中即可,不需要在資料庫端處理
    譬如
    public class Table1
    {
    public byte[] EncColumn //原EF中的欄位
    {
    ...
    }


    public int DecColumns
    {
    get
    {
    return SecurityClass.Dec();//解密字串
    }
    set
    {
    this.EncColumns = SecurityClass.Eec();//加密字串
    }
    }



    程式端直接呼叫DecColumns即可,不需要操作EncColumns.
    這樣

    }
    • 已標示為解答 Lolota Lee 2010年1月22日 上午 06:24
    2010年1月15日 上午 08:36

所有回覆

  • 先確認一點,你所謂的加密欄位是用來做關聯嗎?還是只是一般欄位與關聯無關?
    2010年1月15日 上午 08:10
  • 會加密的欄位是一般欄位,與關聯無關
    謝謝
    2010年1月15日 上午 08:17
  • 如果是這樣那你只需要將加解密程式定義在Entity class中即可,不需要在資料庫端處理
    譬如
    public class Table1
    {
    public byte[] EncColumn //原EF中的欄位
    {
    ...
    }


    public int DecColumns
    {
    get
    {
    return SecurityClass.Dec();//解密字串
    }
    set
    {
    this.EncColumns = SecurityClass.Eec();//加密字串
    }
    }



    程式端直接呼叫DecColumns即可,不需要操作EncColumns.
    這樣

    }
    • 已標示為解答 Lolota Lee 2010年1月22日 上午 06:24
    2010年1月15日 上午 08:36
  • 這是欄位加密,好像不太好寫成C#耶,真傷腦筋
    (CAST( [employee_age] as Decimal(18, 4) ) + 12345678)

    謝謝 Programlin
    2010年1月15日 上午 08:58
  • 這不難吧....
    2010年1月15日 上午 09:02
  • Sorry,
    這個問題我還是到C#板問好了
    謝謝 programlin 前輩
    2010年1月19日 上午 07:01