Re: [SQL] primary key 違反條件約束
自己回答自己...
昨天終於找到原因了
問題在於.dblm檔案和WebForm的衝突
微軟承認在這方面有技術性的疏失
首先,必須對.dbml的.cs檔案和主鍵那一塊做簡修改。
例如:
[column(Storage="_CharID",DbType="Int NOT NULL", IsPrimaryKey=true,
AutoSync=AutoSync.OnInsert,IsDbGenerated=true)]
重點在 "AutoSync=AutoSync.OnInsert,IsDbGenerated=true"
這兩個一定要設定好,因為預設的.dbml並不會主動加入這一行
另外就是資料表PK的部分
"識別規格"要改成"是"
還有要撰寫一堆邏輯上的程式碼
相當麻煩
至於原因是很複雜的!
原因如下:
一般而言,我們使用LINQ to SQL更新資料時,程序為:
1. 建立DataContext
2. 透過from o in ... where ... select o 取出某筆資料物件(例如: m)
3. 設定新值,例如: m.Property = newValue
4. DataContext.SubmitChanges()
5. 大功告成!
這裡有個假設前題是,全程中DataContext一直存在,以便掌握所有透過它
取出的資料物件被更改的狀況。但有個情境是: 如果我將查詢到的資料物件傳遞
到DataContext管不到的範圍,例如: 透過Web Service呼叫變更內容、或轉成JSON
字串送到網頁端修改,等修改後物件傳回時,原本用來取出資料的DataContext已不
復存在,無從SubmitChanges();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.228.237.13
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章