2009-11-25 84 views
3

我使用的LINQ to SQL的數據庫操作,並正嘗試在一個視圖中執行插入操作,它拋出的錯誤,LINQ to SQL:如何將記錄插入視圖?

XXt threw exception: System.InvalidOperationException: Can't perform Create, 
Update or Delete operations on 'Table(XXX)' because it has no primary key. 

如何使用LINQ使用C#中插入記錄查看?

謝謝。

回答

0

您不能插入到視圖。您只能插入表格中。

你可以做到這一點 - 見下文。

+0

不正確,請參閱下面的答案 – 2012-01-23 05:30:02

+0

確實這個回答是錯誤的。如果在組成視圖的表上使用觸發器並指定如何處理它,則可以插入到視圖中。 – Levitikon 2012-09-04 20:06:46

-2

我假設你的意思,而不是試圖插入一行到一個視圖,你想插入一行到一個表。您不要將行插入視圖。

話雖如此,L2S需要你的表有主鍵,隨着錯誤消息指示。一旦你創建一個主鍵,並相應地更新你的.DBML,你應該沒問題。

蘭迪

4

其實你可以插入一個view..if底層的觀點有一個表,那麼你可以插入到它。

如果它有多個表..然後你可以使用,而不是觸發器;

而且我已經插入一條記錄到view..in的LINQ to SQL。 (我剛開始學習linq我自己)。我不得不在視圖上創建一個主鍵。使用設計器,然後將該字段的自動同步設置爲永遠不會。應該做的伎倆..

+0

同意。更新信息在這裏更新視圖; http://msdn.microsoft.com/en-us/library/ms187956(v=sql.90).aspx – 2011-01-05 05:07:18

+0

我必須誠實地說,如果我看到任何我插入視圖的人,我可能會開始! – Matt 2011-06-08 12:38:56

5

您可以插入/更新到的意見,每個可更新視圖here。只有一個基礎表可以插入/更新,否則將失敗。要使用LINQ實現此功能,請執行以下操作;

  • 在你.dbml文件標籤視圖作爲主鍵
  • 列的一個(或多個)確保在視圖中您期望插入/更新都被轉換爲紐帶,以任何映射基表列。例;
    • 可插入/可更新列不能包含;
      • SUM(BaseTable.ColumnName)作爲的ColumnName
      • ISNULL(BaseTable.ColumName,0)作爲的ColumnName
      • BaseTable.ColumnName1 + '' + BaseTable.ColumnName2作爲的ColumnName
    • 但可包括;
      • BaseTable.ColumnName
      • BaseTable.ColumnName作爲MyNewName
  • 標籤的任何已直接映射到基表爲您的.dbml自動生成值列。

給它一個鏡頭。我成功地使用這種技術將視圖作爲我用於讀取/插入/更新記錄的唯一對象。

2

我們可以在LINQ to SQL過程中使用VIEW來插入,更新和刪除操作。我們需要確保的是:視圖應該有主鍵。

我們可以在視圖中爲字段設置主關鍵字。

打開.dbml文件設計器並選擇要作爲主鍵的字段,然後按F4(打開屬性窗口)。

爲所選字段的主鍵屬性選擇true。

現在執行你的程序。它應該工作。

0

此字段在dbml中的自動同步必須爲'OnInsert'