各位前輩好,在處理 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; }
}
如果描述有不清楚或是需要提供更多資訊還請不吝提出!
謝謝各位
疑問:使用情境呢?
老樣子,泛型還是可以適用
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();