2010-05-15 121 views
0

好的,這真的很奇怪。我用一個單一表格Customer做了一個簡單的數據庫,它有一個單列Name。從數據庫I自動生成一個ADO.NET實體數據模型,和我想要一個新客戶添加到它,像這樣:無法使用實體框架更新數據庫中的行...?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Test 
{ 
    class Program 
    { 
     static void Main() 
     { 
      Database1Entities db = new Database1Entities(); 
      Customer c = new Customer(); 
      c.Name = "Harry"; 
      db.AddToCustomer(c); 
      db.SaveChanges(); 
     } 
    } 
} 

但它不堅持客戶「哈利」到數據庫!我一直在撓頭,現在想知道爲什麼這樣一個簡單的操作不起作用。究竟什麼是問題!?

+0

沒有主鍵?沒有自動生成的標識列?嘗試添加INT ID,身份,主鍵到您的表,以便EF有一個EntityKey。 – 2010-05-15 17:03:06

+0

名稱是主鍵。但爲了你的緣故,我嘗試使用ID列作爲主鍵,但這也不起作用! – Dissonant 2010-05-15 17:11:53

+0

如果你在一個try .... catch ....塊中包裝這個 - 你是否會遇到任何異常,如果是的話 - 什麼異常? – 2010-05-15 20:37:19

回答

1

EF要求您有許多操作的唯一索引。

嘗試將一個標識字段(主鍵)添加到您的表中。刪除並重新創建模型,然後重試。

編輯:

它看起來像你從一個控制檯應用程序運行這個。

  • 在app.config文件中是否有連接字符串?
  • 您的解決方案中是否有多個項目?
  • 你有沒有例外?

EDIT2:

接下來的事情嘗試:

  • 使用SQL Server Profiler來查看被髮送到數據庫
  • 打開EF模型在編輯器中看到XML ,檢查是否有任何錯誤
+0

名稱是主鍵。 :/ – Dissonant 2010-05-15 16:51:01

+0

但是Shiraz和Hightechrider認爲添加一個int值爲Indentity = Yes作爲主鍵。這是一個最佳做法,它更優化: http://stackoverflow.com/questions/1603472/indexing-performance-bigint-vs-varchar – JohnB 2010-05-15 17:50:50

+0

我知道這是最佳做法。這只是一個簡單的數據庫測試。請看我對Hightechrider的回覆。 並回答您的問題,設拉子: 是的。 編號 編號 – Dissonant 2010-05-16 11:35:57

0

db放在using聲明中以確保連接/事務在進程退出之前完全關閉。

+0

不,也行不通。 :( – Dissonant 2010-05-15 16:58:08

0

好的,這是一個很長的畫面。你是否確定你的連接字符串指向正確的地方?連接正在運行?

您可以通過使用SQL Server Management Studio中的一些記錄添加到您的測試數據庫驗證它,然後像做

foreach (Customer c in db.Customers) 
{ 
    Console.WriteLine(c.Name); 
} 
相關問題