2017-06-30 80 views
1

我想在SQL服務器中存儲c#對象。我想到了以下選項:在sql server數據庫中存儲c#對象

  1. 閱讀對象字節內存流,並將其保存到數據庫中(但 在SQL不可讀)
  2. JSON,可讀性強,易於轉換,但什麼樣的數據類型?
  3. XML(僅適用於SQL 2016年的數據類型),少了幾分可讀性強,易於轉換,有一個XML數據類型

什麼是存儲C#對象在SQL列的最佳做法,爲什麼? 我正在使用SQL 2014,所以我認爲選項3是最好的?

編輯: 注意:它不是數據查詢,我只是想加載一個對象,我已經緩存到內存中的c#對象。並在c#中執行一些邏輯。從另一個數據庫獲取數據只需要一段時間,因此我將所有數據保存在一個自定義對象中。因此,我認爲我不應該使用ORM

+2

人們通常會使用像Entity Framework這樣的ORM工具。通常你不只是想存儲它們,而且還要查詢。 –

+0

這實際上是選項2和3之間的首選項。我更喜歡XML,但是XML或JSON都有有效的參數。 – gmiley

+0

只存儲像這樣的動態對象 - 如果您有類型化的類,請使用@AlexeyZimarev建議的ORM。 – Filburt

回答

1

如果只是拋出一個數據庫以便稍後用某個鍵讀回數據,請使用(2)並僅使用nvarchar(max)字段類型。

如果是要查詢的數據,那麼您應該設計一個模式來匹配和使用ORM。

+0

要使ORM在這裏工作,OP將需要另一個表和一個外鍵,你應該在細節中包含 –

+0

我不能使用ORM。因爲我想讓所有的數據+ - 200MB的內存來做我的分析。但它大約需要。 2天收集200MB數據(來自天藍色表格存儲)。因此,我想將它存儲在某處,以防萬一我的應用程序需要重新啓動並清理內存。 – user1408786

+0

爲什麼ORM會阻止您快速存儲200MB或快速檢索?即使這確實降低了速度,爲什麼不在你的本地機器上安裝SQL Express,並將數據存儲在那裏呢?這樣,您可以使用ORM,而不會出現速度問題。 – ohyeah

0

如果您對選項B更積極,那麼您可以將任何對象[或數據類型]的json序列化字符串作爲NVARCHAR(MAX)字段存儲在sql server中。

而當你想讀它時,你可以很容易地反序列化原始格式的字符串。

例如

Demo d1=new Demo(); 

//store this json into database. 
string json= JsonConvert.SerializeObject(d); 

// Now while reading fron db 
Demo d2= JsonConvert.DeserializeObject<Demo>(json); 
0

我會去JSON序列化,它只是文字,所以存儲喜歡的東西「用戶配置文件設置」或其他類型的結構數據,當你覆蓋,你可以閱讀和在任何語言編寫JSON。現在SQL服務器也已經理解了這一點,就像8-10年前的這種炒作的XML支持一樣,現在可以存儲JSON,併爲那些需要更新數據的人提供大量的TSQL支持,比如當你需要修復所有的數據時所有用戶更新...

無論如何,看看文章。 JSON in SQL Server 2016-2017 從JSON出發時,您應該測試您的屬性,因爲某些數據類型可能不會根據像日期和小數值這樣的區域特定設置進行前後轉換。

相關問題