2012-08-08 155 views
2

我一直在考慮使用存儲在數據庫中的數據動態創建對象。我通過序列化每個對象的所有屬性來完成類似的事情,但那是幾年前,時代已經改變了。從SQL數據動態創建對象

其實我喜歡在回答中概述爲以下問題的方法: How to do dynamic object creation and method invocation in .NET 3.5

我不知道是否有可能進一步採取這一步驟,並設置使用存儲的數據對象的所有屬性。

很顯然,我可以設置每個屬性的單獨IE:
Person p = new Person();
p.Name = "Me";
p.Age = 31;

是否可以做更多的在線東西(抱歉,不太知道這是什麼所謂的),如Person p = new Person() { Name = "Me", Age = 31 };其中Name = "Me", Age = 31性質或字符串可能源自數據庫?

有什麼想法?

+0

從數據庫中檢索數據並將其存儲到集合中後,爲什麼不簡單地遍歷此集合並創建對象? – 2012-08-08 10:23:42

+0

這是我在做什麼,只是想知道如果有一個聰明的做法,或許會更有活力 – 2012-08-08 10:29:34

+0

嗯,你可以使用Linq ICollection的山坳= dbCollection.Select(X =>新的Person(x.Prop1,X。 Prop2,...); 或類似的東西 – 2012-08-08 10:32:38

回答

1

假設你讀取數據庫的價值觀念,在字典中,如:

Dictionary<string, string> parameters = new Dictionary<string, string>() 
{ 
    {"Name","Scott"}, 
    {"Age","30"} 
}; 

(見字典的類型:字符串,字符串年齡其實INT

您可以動態創建您的對象爲

var obj = Activator.CreateInstance(Type.GetType("SO.Form2+Person")); 

foreach (var pi in obj.GetType().GetProperties()) 
{ 
    pi.SetValue(obj, Convert.ChangeType(parameters[pi.Name], pi.PropertyType)); 
} 

-

public class Person 
{ 
    public string Name { set; get; } 
    public int Age { set; get; } 
} 
+0

很多很多謝了,你幫了我很大的忙!對於我在回覆中延誤的道歉,我正在測試各種想法(包括你的)。 – 2012-08-10 14:02:47

+0

因爲我主要是在處理UI控件,所以實際上我最終使用'TypeDescriptor.GetProperties'方法來遍歷屬性並更新字典中包含的任何東西。 @ L.B你的資產給社區!非常感謝 – 2012-08-10 14:14:54

2

你有沒有想過使用LINQ to SQL?它獲取SQL數據庫的所有表並將它們轉換爲c#類。您可以通過DataContext對象訪問所有數據,每個表都可以成爲一個可以通過LINQ調用/編輯/更新的類。

請閱讀以下材料。網上有很多例子。

http://msdn.microsoft.com/en-us/library/bb425822.aspx

我希望這有助於。

+0

我可以看到Linq將從我的表中創建類,但不知道它是否會有所幫助,因爲不同的對象已經被保存到同一個表中的不同記錄中,作爲一個非常簡單的例子,記錄中的值可能是'objectType',它會指示存儲的對象的類型在'對象'表中。 – 2012-08-08 10:51:46

+0

@WaynePhipps,這通常不是製作SQL表的好方法,但是如果數據庫超出了你的控制範圍,你仍然可以使用LINQ中的自動生成類型作爲父類,然後定義繼承的類從它存儲在表中的每種類型。如果您確實擁有對數據庫的控制權,那麼每個類型都會獲得(至少)一個表。 – 2017-09-27 14:47:44