作者wa007123456 (大笨羊)
看板Database
标题Re: [SQL] primary key 违反条件约束
时间Tue Jun 7 18:33:53 2011
自己回答自己...
昨天终於找到原因了
问题在於.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