iT邦幫忙

0

一張資料表對多張資料表,如何用一個Class定義DataModel,並使其能夠包含各資料表的指定欄位

  • 分享至 

  • xImage

各位前輩好,在處理 DataModel 的時候遇到一個問題
想請教各位

我現在有一個 ContentItem 資料表,裡面包含:

ID
TYPE

這個 ContentItem 實際上對應非常多不同的資料表
舉例來說,有 Text、Title....等等都是歸類於 ContentItem

但是 Text 資料表有自己的屬性,用 ID 可以對應到其

TEXTID
TEXT

而 Title 也有自己的屬性,用 ID 可以對應到其

TITLEID
TITLE

每個 Item 也各自有各自的屬性 → 也就是需要有許多類別分別定出各 Item 的屬性

我現在遇到的問題是
假設我輸入一個值到 ContentItem 資料表 SELECT 需要的資料
預想是能夠回傳一個 Class 為 ContentItem
裡面會有ID、TYPE、以及一個 Content 包所需的欄位以及其值

那在回傳型別的時候應該如何定義這個 DataModel,使回傳時除了有共同的欄位,也保留各資料表所需的欄位呢?

舉例來說:
ContentItem:為TEXT

{
"ID":1,
"TYPE":1,
"Content":{
"TEXTID":1,
"TEXT":"測試TEXT"
}
}

ContentItem:內容為TITLE

{
"ID":2,
"TYPE":2,
"Content":{
"TITLEID":1,
"TITLE":"測試TITLE"
}
}

但兩者的 DataModel 都是 ContentItem

補充一下
原先有使用過以下方法
在各 item 取得欄位時就用 object 塞到 Content內
但不曉得有無不使用 object 的方式

public class ContentItem : IContentItem
    {
        public int Id { get; set; }
        public int Type { get; set; }
        public object Content { get; set; }
     }

如果描述有不清楚或是需要提供更多資訊還請不吝提出!
謝謝各位

科科 iT邦好手 8 級 ‧ 2021-12-30 10:03:20 檢舉
使用 Entity Framework 能達到你想要的嗎?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
powerc
iT邦研究生 5 級 ‧ 2021-12-30 12:02:43

疑問:使用情境呢?


老樣子,泛型還是可以適用

public class ContentItem<T> : IContentItem
{
    public int Id { get; set; }
    public int Type { get; set; }
    public T Content { get; set; }
}

public class TextClass
{
    public int TextId { get; set; }
    public string Text { get; set; }
}

這樣一來
(以EntityFramework為例)

ContentItem<TextClass> content = DbContext.Foo.Where(w => w.Id == 1).Select(s => new ContentItem<TextClass>{
    Id = s.Id,
    Type = s.Type,
    Content = new TextClass{ /* 同樣assign作法 */ }
}).SingleOrDefault();

使用情境比較接近於我會宣告一個方法,定義回傳型別
但是宣告泛型方法跟回傳值的部分目前try不出來
請p大支援一下或是給予提示
感謝!

我要發表回答

立即登入回答