2012-02-26 62 views
0

我試圖使用實體框架將記錄插入到表中。我創建了我的數據庫(mdf文件),從數據庫(edmx)創建了一個模型,現在我試圖插入一條記錄。調用ObjectContext.SaveChanges()後數據庫更改不會持續

Users Brad = new Users 
{ 
    UserInitials="BCH", 
    UserName="Brad" 
}; 
using (WeighProgramDatabaseEntities wDB = new WeighProgramDatabaseEntities()) 
{ 
    wDB.Users.AddObject(Brad); 

    int res = wDB.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave); 
    List<Users> lwt = wDB.Users.ToList(); //call to look at the inserted data 
} 

當我按照這個程序,它似乎一切工作正常。我的wDB.Users.ToList();返回一個我剛插入的記錄。但是,如果我再次運行我的代碼,刪除插入的東西,只是調用查詢(只留下)List<Users> lwt = wDB.Users.ToList();我的查詢返回沒有記錄。我應該採取什麼不同的方式來讓我的變化持續下去?爲什麼我的記錄「走開」?

WeighProgramDatabaseEntities繼承自ObjectContext

這是我第一次使用EF的東西,所以我的一些言辭可能不正確,我可能不會包含重要的東西 - 讓我知道。

編輯:

我想我的問題是,我的插入/更新/刪除功能不被映射。但我不知道如何創建一個存儲過程,讓他們映射到...

EDIT2:

好吧,唷,我想通了這個存儲過程映射。現在我有一個插入映射,我打電話AddObject它實際上會被插入。

比我預料的要複雜一點。例如,如果我右鍵單擊我的數據庫瀏覽器中的表並選擇新查詢,它會將我帶到一個優秀的查詢設計器窗口,讓我創建插入,選擇,更新...但沒有保存按鈕!這是灰色的。我需要從另一條路線寫下它們,但不讓我通過GUI生成插入/刪除/更新。我猜可以,因爲他們沒有太多的文字,但仍然有點麻煩。

+0

您不需要存儲過程。你的代碼應該工作。你使用自己的事務(例如'TransactionScope')嗎? – 2012-02-26 19:42:40

+0

@LadislavMrnka我沒有使用我自己的交易。上面的代碼實際上是我編寫的與數據庫交互的唯一的東西。我想認爲它應該只是工作,但可惜......事實並非如此。 – Brad 2012-02-26 20:21:48

+0

我明白了!它們都聚集在一起。我在Add New Item ...屏幕中看不到'Linq to SQL classes'選項。我沒有一個'dbml'文件,並且這個文件都讓我循環。一切工作現在只需很少的努力。 – Brad 2012-02-26 20:50:19

回答

6

我認爲您的ConnectionString指向解決方案的Debug/Release文件夾中的mdf,並且每次構建應用程序時該文件可能被覆蓋,這就是爲什麼您認爲您的更改沒有被保留。嘗試將ConnectionString設置爲指向項目文件夾中的mdf(實際上由項目引用的那個)。

+0

男孩,我在過去的幾個小時裏走了很長一段路,事實證明這是我最大的問題之一。 – Brad 2012-02-27 03:23:27

1

您還可以將「複製到輸出目錄」文件屬性設置爲「複製如果更新」而不是「始終複製」。如果更新項目中的數據庫模式,則它將比調試目錄中的數據庫文件更新,並且在編譯時它將被覆蓋。

相關問題