2017-05-19 32 views
0

我有一個在mongo db「computers」中的集合,我想要檢索collect並將其保存到sql server使用實體框架。問題是集合有一個數組對象。我想將它轉換爲字符串並保存。請幫助,謝謝。 SQL服務器跳過字符串[]憑證並插入其餘部分。如何將字符串數組屬性轉換爲字符串保存在sql server中作爲逗號分隔的行mongo db到sql server C#

蒙戈DB收集

{ 
"_id": ObjectId('57852fcsdsdsdsd2662a0ce400'), 
"machineName": "AAADESKTOP", 
"updated": ISODate('2017-05-17T15:09:39.399Z'), 
"__v": 111, 
"credentials": [ 
    "####################", 
    "####################", 
    "#################", 
    "#####################" 
], 
"clientVersion": "2.12.2", 
"lastActivity": ISODate('2017-05-17T16:30:50.165Z'), 
"secret": "####################" 

}

**C# code** 


    var client = new MongoClient(); 

    var db = client.GetDatabase("Computerdata"); 
    var collection = db.GetCollection<Computers>("computers"); 

    var data = collection.Find(new BsonDocument()).ToListAsync().Result; 

    foreach (var item in data) 
    { 
     EntityFramewrokContext.Computers.Add(item); 
     EntityFramewrokContext.SaveChanges(); 

    } 




    public class Computers 
{ 
    [BsonId] 
    [BsonRepresentation(BsonType.ObjectId)] 
    [Key] 
    public string Id { get; set; } 
    public string machineName { get; set; } 
    [BsonDateTimeOptions(Representation = BsonType.DateTime)] 
    public DateTime updated { get; set; } 
    public int version { get; set; } 
    public string[] credentials { get; set; } 
    public string clientVersion { get; set; } 
    [BsonDateTimeOptions(Representation = BsonType.DateTime)] 
    public DateTime lastActivity { get; set; } 
    public string secretKey { get; set; } 

} 
+1

不確定你在這裏需要什麼幫助。但是不要像這樣存儲分隔數據。它違反了1NF並導致無數的痛苦。 –

+0

請閱讀關於數據庫規範化https://en.wikipedia.org/wiki/Database_normalization –

+0

實體框架跳過「字符串[]憑證」以下不保存「憑據」:[ 「######### ###########「, 」####################「, 」########## ###########「 ] –

回答

1

如果你有一個表中的SQL Server稱爲Computer(要寫下這些記錄),那麼您還需要建立稱爲ComputerCredential的表具有以下列:

CredentialId int 
ComputerId int 
Credential nvarchar(200) 

然後對於數組中的每個證書,您應該創建一個ComputerCredential實體。

如果你拼命想按照你的要求去做。然後:

var creds = String.Join(",", computer.credentials); 

這將採取憑證的數組,並使它們成爲一個逗號分隔的字符串。

當您檢索的值,你可以這樣做:

var creds = commaSepCredentials.Split(','); 

要檢索的陣列。但是不要這樣做,首先要做的就是了解SQL Server中的關係和連接。這是關係數據庫中的強大功能。

+0

謝謝louthster.I試圖從mongo db集合中檢索數據並使用實體框架插入到SQL中。我無法找出解決方案。如果我使用var creds = String.Join(「,」,computer.credentials),我會在哪裏插入這條語句? –

+0

由於SQL服務器使用平坦表,因此您應該在對象和模型中引入屬性creds,而不是在保存/從數據庫中檢索數據之前映射憑據並填充creds /憑證。另一種解決方案是爲一對多關係引入新的憑證對象,以便自動映射到兩個表並關聯。 – DevilSuichiro

相關問題