LINQ TO SQL学习笔记(6)_常见异常及解决办法
2009-05-25 18:11
253 查看
P {
MARGIN-BOTTOM: 15px
}
BLOCKQUOTE {
PADDING-LEFT: 30px
}
H1 {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 20px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 20px; PADDING-TOP: 0px; LETTER-SPACING: 1px
}
H2 {
MARGIN-TOP: 35px; FONT-WEIGHT: bold; FONT-SIZE: 14px; MARGIN-BOTTOM: 20px; COLOR: #333
}
H3 {
FONT-SIZE: 12px; MARGIN: 12px 0px
}
.example-info {
BORDER-RIGHT: #c3daf9 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #dceafb 1px solid; PADDING-LEFT: 8px; FONT-SIZE: 10px; BACKGROUND: url(info-bg.gif) #ecf5fe repeat-x; PADDING-BOTTOM: 8px; BORDER-LEFT: #dceafb 1px solid; WIDTH: 150px; PADDING-TOP: 8px; BORDER-BOTTOM: #c3daf9 1px solid
}
PRE.code {
BORDER-RIGHT: #e8e8e8 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #e8e8e8 1px solid; PADDING-LEFT: 10px; FONT-SIZE: 12px! important; BACKGROUND: #f8f8f8; PADDING-BOTTOM: 10px; MARGIN: 10px 10px 10px 0px; BORDER-LEFT: #e8e8e8 5px solid; COLOR: #3f747f; LINE-HEIGHT: 14px! important; PADDING-TOP: 10px; BORDER-BOTTOM: #e8e8e8 1px solid
}
.msg .x-box-mc {
FONT-SIZE: 14px
}
#msg-div {
Z-INDEX: 20000; LEFT: 35%; WIDTH: 250px; POSITION: absolute; TOP: 10px
}
.x-grid3-row-body P {
MARGIN: 5px 5px 10px
}
.sandbox-wrapper {
PADDING-RIGHT: 12px; PADDING-LEFT: 12px; PADDING-BOTTOM: 12px; PADDING-TOP: 12px
}
.sandbox-toolbar {
PADDING-RIGHT: 4px; DISPLAY: block; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-TOP-STYLE: none; PADDING-TOP: 4px; BORDER-BOTTOM: #8db2e3 1px solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #dfe8f6; TEXT-ALIGN: right
}
.sandbox-toolbar TABLE {
DISPLAY: inline
}
.icon-reload {
BACKGROUND-IMAGE: url(../images/reload.gif)! important
}
DIV.information {
BORDER-RIGHT: #99bbe8 1px solid; PADDING-RIGHT: 12px; BORDER-TOP: #99bbe8 1px solid; PADDING-LEFT: 36px; BACKGROUND: url(http://www.cnblogs.com/icons/information-png/coolite.axd) #dfe8f6 no-repeat 10px 10px; PADDING-BOTTOM: 0px; MARGIN: 12px 0px; BORDER-LEFT: #99bbe8 1px solid; PADDING-TOP: 8px; BORDER-BOTTOM: #99bbe8 1px solid
}
P {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 12px; MARGIN: 0px; LINE-HEIGHT: 20px; PADDING-TOP: 0px
}
OL.expanded LI {
LINE-HEIGHT: 25px
}
OL.expanded {
PADDING-LEFT: 40px; LIST-STYLE-TYPE: decimal
}
.doc-member {
FONT-WEIGHT: bold
}
.doc-prop {
FONT-WEIGHT: bold
}
.doc-item {
BORDER-RIGHT: #d0d0d0 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #d0d0d0 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #d0d0d0 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #d0d0d0 1px solid
}
.doc-item STRONG {
FONT-WEIGHT: bold
}
.doc-desc {
PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; PADDING-TOP: 8px
}
.doc-params {
PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; PADDING-TOP: 8px
}
.doc-params STRONG {
FONT-SIZE: 12px; COLOR: #555
}
.doc-params UL {
PADDING-LEFT: 25px; MARGIN: 4px; COLOR: #555; LIST-STYLE-TYPE: disc
}
.doc-params UL LI {
MARGIN-BOTTOM: 5px
}
.doc-optional {
FONT-FAMILY: monospace
}
本文会继续更新...
LINQ TO SQL采用配置式开发
[System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException]: {"对象的当前状态使该操作无效。"}
在使用断开方式的DataContext时候,如果当前对象没有序列化,会产生此异常。
解决办法:生成Map文件时候序列化参数选择'Unidirectional' 如下:
sqlMetal /conn:server=.;database=ERP;uid=sa;pwd=Mypass800624 /code:D:\ERP.cs /Map:D:\ERP.map /namespace:DMN /serialization:Unidirectional
产生原因:断开模式下,对象要进行Attach对象上下文中才能进行Save操作,就是说要以流的形式进行数据表达,因此如果对象没有序列化,就是出现此异常
[System.Runtime.Serialization.SerializationException]: {"类型的对象图包含循环,如果禁用引用跟踪,择无法对其进行序列化。"}
在使用断开方式的DataContext时候,在递归保存对象的时候,如果子对象没有序列化,会发生此异常
解决办法:同上
产生原因:断开模式下,对象进行递归Save操作时候,子对象要先Detach下来然后Attach上去,,就是说要以流的形式进行数据表达,因此如果子对象没有序列化,就是出现此异常
[System.InvalidOperationException]: {"如果实体声明了版本成员或者没有更新检查策略,则只能将它附加为没有原始状态的已修改实体。"}
在使用断开方式的DataContext时候,在进行对象Save的的时候,如果该对象有Key,而Map文件中没有版本策略声明会有此异常
解决办法:实际上这是个管理并发冲突的机制,可参考:微软的官方文档 我的解决办法在Map文件中Key加上IsVersion属性,因为我的主键为数据库的自动标示,如下:
<column name="ID" member="ID" storage="_ID" dbtype="Int NOT NULL IDENTITY" isprimarykey="true" isdbgenerated="true" autosync="OnInsert" isversion="true" />
产生原因:断开模式下,对象进行递归Save操作时候,如果该对象有Key,系统又找不到记这个对象被Modified过的策略,产生此异常。
未将对象引用设置到对象的实例。
使用方式我举个例子:
string prece = " InDate >= DateTime.Parse(\"2008-08-09\")";
IList<Student> pp = LQDB.Where(prece);
var source = from s in pp
select new { s.ID, s.Name, s.IDO, s.InDate, s.FromSchool, NO = s.AMClass == null ? "" : s.AMClass.NO, ChargePMName = s.AMClass == null ? "" : s.AMClass.ChargePMName, RoomName =s.AMClass == null ?"": s.AMClass.RoomName, s.MB };其中pp是我选择的学生集合, 我重新组合,通过 NO = s.Class.NO得到学生班级编号,结果有的学生还没有分班(我们外包培训基地,业务比较特殊)导致班级 s.Class为Null
解决办法:Null检查,我的解决办法,如下:
' var source = from s in pp select new { s.ID, s.Name, s.IDO, s.InDate, s.FromSchool, NO = s.AMClass == null ? "" : s.AMClass.NO};
产生原因:学生的类的Class为null,当然对Class的No引用就是产生此异常。
MARGIN-BOTTOM: 15px
}
BLOCKQUOTE {
PADDING-LEFT: 30px
}
H1 {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 20px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 20px; PADDING-TOP: 0px; LETTER-SPACING: 1px
}
H2 {
MARGIN-TOP: 35px; FONT-WEIGHT: bold; FONT-SIZE: 14px; MARGIN-BOTTOM: 20px; COLOR: #333
}
H3 {
FONT-SIZE: 12px; MARGIN: 12px 0px
}
.example-info {
BORDER-RIGHT: #c3daf9 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #dceafb 1px solid; PADDING-LEFT: 8px; FONT-SIZE: 10px; BACKGROUND: url(info-bg.gif) #ecf5fe repeat-x; PADDING-BOTTOM: 8px; BORDER-LEFT: #dceafb 1px solid; WIDTH: 150px; PADDING-TOP: 8px; BORDER-BOTTOM: #c3daf9 1px solid
}
PRE.code {
BORDER-RIGHT: #e8e8e8 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #e8e8e8 1px solid; PADDING-LEFT: 10px; FONT-SIZE: 12px! important; BACKGROUND: #f8f8f8; PADDING-BOTTOM: 10px; MARGIN: 10px 10px 10px 0px; BORDER-LEFT: #e8e8e8 5px solid; COLOR: #3f747f; LINE-HEIGHT: 14px! important; PADDING-TOP: 10px; BORDER-BOTTOM: #e8e8e8 1px solid
}
.msg .x-box-mc {
FONT-SIZE: 14px
}
#msg-div {
Z-INDEX: 20000; LEFT: 35%; WIDTH: 250px; POSITION: absolute; TOP: 10px
}
.x-grid3-row-body P {
MARGIN: 5px 5px 10px
}
.sandbox-wrapper {
PADDING-RIGHT: 12px; PADDING-LEFT: 12px; PADDING-BOTTOM: 12px; PADDING-TOP: 12px
}
.sandbox-toolbar {
PADDING-RIGHT: 4px; DISPLAY: block; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-TOP-STYLE: none; PADDING-TOP: 4px; BORDER-BOTTOM: #8db2e3 1px solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #dfe8f6; TEXT-ALIGN: right
}
.sandbox-toolbar TABLE {
DISPLAY: inline
}
.icon-reload {
BACKGROUND-IMAGE: url(../images/reload.gif)! important
}
DIV.information {
BORDER-RIGHT: #99bbe8 1px solid; PADDING-RIGHT: 12px; BORDER-TOP: #99bbe8 1px solid; PADDING-LEFT: 36px; BACKGROUND: url(http://www.cnblogs.com/icons/information-png/coolite.axd) #dfe8f6 no-repeat 10px 10px; PADDING-BOTTOM: 0px; MARGIN: 12px 0px; BORDER-LEFT: #99bbe8 1px solid; PADDING-TOP: 8px; BORDER-BOTTOM: #99bbe8 1px solid
}
P {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 12px; MARGIN: 0px; LINE-HEIGHT: 20px; PADDING-TOP: 0px
}
OL.expanded LI {
LINE-HEIGHT: 25px
}
OL.expanded {
PADDING-LEFT: 40px; LIST-STYLE-TYPE: decimal
}
.doc-member {
FONT-WEIGHT: bold
}
.doc-prop {
FONT-WEIGHT: bold
}
.doc-item {
BORDER-RIGHT: #d0d0d0 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #d0d0d0 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #d0d0d0 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #d0d0d0 1px solid
}
.doc-item STRONG {
FONT-WEIGHT: bold
}
.doc-desc {
PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; PADDING-TOP: 8px
}
.doc-params {
PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; PADDING-TOP: 8px
}
.doc-params STRONG {
FONT-SIZE: 12px; COLOR: #555
}
.doc-params UL {
PADDING-LEFT: 25px; MARGIN: 4px; COLOR: #555; LIST-STYLE-TYPE: disc
}
.doc-params UL LI {
MARGIN-BOTTOM: 5px
}
.doc-optional {
FONT-FAMILY: monospace
}
LINQ TO SQL学习笔记(6)_常见异常及解决办法
引言
网上介绍Linq TO SQL的资料不少,但是实际工程中的例子很少,本文是我在使用Linq TO SQL开发项目中遇到的异常及解决方法,希望对您有帮助.本文会继续更新...
系统环境
Visual Studio 2008 NET Framework 3.5+Microsoft SQL Server 2005+Window XP+ SP3LINQ TO SQL采用配置式开发
常见异常
本文基本上使用断开的DataContext方式下开发中出现的异常。[System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException]: {"对象的当前状态使该操作无效。"}
在使用断开方式的DataContext时候,如果当前对象没有序列化,会产生此异常。
解决办法:生成Map文件时候序列化参数选择'Unidirectional' 如下:
sqlMetal /conn:server=.;database=ERP;uid=sa;pwd=Mypass800624 /code:D:\ERP.cs /Map:D:\ERP.map /namespace:DMN /serialization:Unidirectional
产生原因:断开模式下,对象要进行Attach对象上下文中才能进行Save操作,就是说要以流的形式进行数据表达,因此如果对象没有序列化,就是出现此异常
[System.Runtime.Serialization.SerializationException]: {"类型的对象图包含循环,如果禁用引用跟踪,择无法对其进行序列化。"}
在使用断开方式的DataContext时候,在递归保存对象的时候,如果子对象没有序列化,会发生此异常
解决办法:同上
产生原因:断开模式下,对象进行递归Save操作时候,子对象要先Detach下来然后Attach上去,,就是说要以流的形式进行数据表达,因此如果子对象没有序列化,就是出现此异常
[System.InvalidOperationException]: {"如果实体声明了版本成员或者没有更新检查策略,则只能将它附加为没有原始状态的已修改实体。"}
在使用断开方式的DataContext时候,在进行对象Save的的时候,如果该对象有Key,而Map文件中没有版本策略声明会有此异常
解决办法:实际上这是个管理并发冲突的机制,可参考:微软的官方文档 我的解决办法在Map文件中Key加上IsVersion属性,因为我的主键为数据库的自动标示,如下:
<column name="ID" member="ID" storage="_ID" dbtype="Int NOT NULL IDENTITY" isprimarykey="true" isdbgenerated="true" autosync="OnInsert" isversion="true" />
产生原因:断开模式下,对象进行递归Save操作时候,如果该对象有Key,系统又找不到记这个对象被Modified过的策略,产生此异常。
未将对象引用设置到对象的实例。
使用方式我举个例子:
string prece = " InDate >= DateTime.Parse(\"2008-08-09\")";
IList<Student> pp = LQDB.Where(prece);
var source = from s in pp
select new { s.ID, s.Name, s.IDO, s.InDate, s.FromSchool, NO = s.AMClass == null ? "" : s.AMClass.NO, ChargePMName = s.AMClass == null ? "" : s.AMClass.ChargePMName, RoomName =s.AMClass == null ?"": s.AMClass.RoomName, s.MB };其中pp是我选择的学生集合, 我重新组合,通过 NO = s.Class.NO得到学生班级编号,结果有的学生还没有分班(我们外包培训基地,业务比较特殊)导致班级 s.Class为Null
解决办法:Null检查,我的解决办法,如下:
' var source = from s in pp select new { s.ID, s.Name, s.IDO, s.InDate, s.FromSchool, NO = s.AMClass == null ? "" : s.AMClass.NO};
产生原因:学生的类的Class为null,当然对Class的No引用就是产生此异常。
相关文章推荐
- iOS常见异常Exec_Bad_Access问题解决办法
- [置顶] 常见的异常产生的原因和解决办法
- Android Studio 常见异常解决办法
- UDDI4j访问JUDDI时常见异常解决办法
- 常见异常解释及解决办法
- mysql -- 常见异常的解决办法导引
- iOS常见异常Exec_Bad_Access问题解决办法
- 一些常见异常及解决办法(持续更新)
- Eclipse之NDK编译——常见异常的解决办法记录
- 【Android】常见异常 —— android.view.WindowLeaked 分析以及解决办法
- Android Eclipse工程开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决办法
- linux centos7 安装MQTT mosquitto时常见异常及解决办法
- linux centos7 安装MQTT mosquitto时常见异常及解决办法
- 虚拟机安装Linux中常见异常及解决办法
- iOS常见异常Exec_Bad_Access问题解决办法
- solr常见异常解决办法
- Entity Framework 6.0 常见异常及解决办法
- Java常见异常和解决办法
- 1.Android常见异常:android.view.WindowLeaked 分析以及解决办法
- 【Android】常见异常 —— android.view.WindowLeaked 分析以及解决办法