2011-02-07 45 views
2

我想將數據插入1GB大小的數據庫中。我目前正在用LINQ-to-Entities查詢數據庫。我有一個到數據庫的LINQ-to-Entities連接 - 如何將數據插入到數據庫中?

問題是數據庫很大 - 我不想將整個數據庫拉入內存只是爲了插入。

你推薦的將數據插入特定表的方法是否合理高效?

更新:

我要澄清的是,我將數據插入到連接到其他兩個表有一個一對多的關係的表,多數民衆贊成。有沒有讓ADO框架處理主/外鍵關係更新的方法?

更新:

找到正確的答案,請參閱How do I use LINQ-to-Entities to insert data into a specific table?

+1

哦,你真的需要學習數據庫和SQL是如何工作的。因爲對此的回答是「只需插入數據」。 – 2011-02-07 16:34:21

+0

當您有多個需要與主鍵/外鍵同步的表時,並不那麼簡單 - 請參閱http://blogs.msdn.com/b/efdesign/archive/2009/03/16/foreign-keys-in-the-the- entity-framework.aspx – Contango 2011-02-07 20:29:28

回答

2

您可以使用存儲過程怎麼一回事,因爲數據量。或者您可以創建一個帶有數據的文件,每行讀取一行,並使用Linq插入每行一行,以便數據不會同時加載到內存中

爲什麼要使用存儲過程?我們來看看這項技術的主要優點: 預編譯執行。 SQL Server編譯每個存儲過程一次,然後重新使用執行計劃。當存儲過程被重複調用時,這會帶來巨大的性能提升。 減少客戶端/服務器流量。如果網絡帶寬是您的環境中的一個問題,您將很高興得知存儲過程可以將長SQL查詢減少爲通過線路傳輸的單個線路。 代碼和編程抽象的有效重用。存儲過程可以被多個用戶和客戶端程序使用。如果你有計劃地使用它們,你會發現開發週期花費的時間更少。 增強的安全控制。您可以授予用戶獨立於基礎表權限而執行存儲過程的權限。 在MSSQL中,語言是Transact-SQL(T-SQL)。

+0

什麼是「存儲過程」? – 2011-02-07 17:53:15

+0

Ups,Stored Procedures ... DB電機有一種編程語言,允許直接與數據交互。再次查看答案 – SebRojas 2011-02-07 19:11:07

1

您不需要查詢任何內容來執行插入操作。當使用實體框架進行插入時,LINQ將不起作用。使用您要創建的實體的Create ...工廠方法。然後,將它添加到實體上下文並調用SaveChanges()方法。

例如(vb.net),如果有一個表/實體名爲訂單和實體上下文稱爲OrderEntities工作:

Using context As New OrderEntities 
    Dim order As Order = Order.CreateOrder(OrderNumber, Description, etc) 
    context.AddToOrders(order) 
    context.SaveChanges() 
End Using 

這將被改造成一個INSERT語句到數據庫。

這是一個非常簡單的例子。您可能需要添加關聯,執行驗證等。但是,它說明您可以使用實體框架進行插入,而無需首先執行LINQ to Entities查詢。

編輯:

是在一側或關係的很多方面這個表?如果它位於一側(主鍵表),則不需要執行任何操作,因爲外鍵引用位於另一個表中。如果它是多邊(外鍵表),那麼在調用AddTo()方法之前,需要設置外鍵關聯。

如果外鍵是加載到實體上下文的實體,您可以直接設置它:order.Customer = customer

但是,如果它不是從數據庫中加載,你可以設置的EntityKey:order.CustomerReference.EntityKey = New EntityKey("OrderEntities.Customer", "CustomerID", 5)

0

是。

using(Entities context = new Entities() { 
{ 
Entity1 e1 = new Entity1{Id=-1, Name="E1"}); 
Entity2 e2 = new Entity2{Id=-1, Name="E2", Entity1=e1}); 
context.Entities2.AddObject(e2); 
context.SaveChanges(); 
} 

我不確定是否必須將e1添加到Entities1集合中。

爲了實現這個功能,您必須在您的表中將de Id定義爲Identity列。

相關問題